列表

详情


NC21776. 八意永琳的药房

描述


众所周知,八意永琳擅长制作药物.
今天八意永琳又制作了很多份药物,但是由于材料组成的不同,最终的品级也会不同
已知八意永琳制作的药物中,一共有n种不同的主材料,用1...n编号,每种主材料有ai种产地,每种产地都有自己的品级.
每种主材料只取某个产地的一份,最终该药物的品级为所有主材料的品级之和.
她的弟子铃仙很好奇,可能的药物品级,到底有少种?
被称为"狂气之月兔"的铃仙实在算不出来了,你能帮帮她吗?


输入描述

输入第一行包括一个整数n
接下来n行,每行一个数字ai,表示该种主材料的产地数量 紧接着是ai个整数kj,表示不同产地的材料品级
1<=n<=100 , 1<=ai<=10000,1<=ki<=300

输出描述

输出一个整数,表示可能的种类数量

示例1

输入:

5
1 1
1 1
2 1 2
3 1 2 3
1 100  

输出:

4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 1268ms, 内存消耗: 616K, 提交时间: 2018-12-23 13:26:09

#include <bits/stdc++.h>
using namespace std;


int main()
{
    bitset<30000+100> now,ans;
    int n;
    scanf("%d",&n);
    ans[0]=1;
    while(n--)
    {
        int t,v;  scanf("%d",&t);
        now=ans;
        for(int i=1;i<=t;i++)
        {
            scanf("%d",&v);
            if(i==1)
            {
                ans=(ans<<v);
                continue;
            }
            ans|=now<<v;
        }
        //cout<<"debug"<<ans<<endl;
    }
    cout<<ans.count()<<endl;
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 1584ms, 内存消耗: 504K, 提交时间: 2018-12-22 14:46:30

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

bitset<30010> b[2];
int n;

int main()
{
	scanf("%d",&n);
	b[0].set(0);
	for(int i=1,c,x;i<=n;i++)
	{
		scanf("%d",&c);
		b[i&1]=0;
		for(int j=1;j<=c;j++)
		{
			scanf("%d",&x);
			b[i&1]|=b[(i&1)^1]<<x;
		}
	}
	printf("%d\n",b[n&1].count());
}

上一题