题目名称 | 217. [USACO Open05] 疾病管理 |
---|---|
输入输出 | disease.in/out |
难度等级 | ★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | cqw 于2008-11-13加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:123, 提交:329, 通过率:37.39% | ||||
HeHe | 100 | 0.007 s | 0.82 MiB | C++ |
FoolMike | 100 | 0.008 s | 0.79 MiB | C++ |
L_in | 100 | 0.015 s | 0.32 MiB | C++ |
牧殇 | 100 | 0.016 s | 0.55 MiB | C++ |
lingyixiaoyao | 100 | 0.017 s | 0.32 MiB | C++ |
liuliuliu | 100 | 0.017 s | 0.32 MiB | C++ |
WildRage | 100 | 0.017 s | 0.32 MiB | C++ |
lingyixiaoyao | 100 | 0.018 s | 0.32 MiB | C++ |
Narcissus | 100 | 0.020 s | 0.34 MiB | C++ |
chad | 100 | 0.022 s | 0.32 MiB | C++ |
本题关联比赛 | |||
NOIP2008集训模拟5 |
关于 疾病管理 的近10条评论(全部评论) | ||||
---|---|---|---|---|
k=22左右似乎只能集合并卷积卡常了
| ||||
正反dp是个玄学……
HZOI_蒟蒻一只
2017-05-17 17:15
12楼
| ||||
k>=0 不是>=1
Herian
2017-02-25 14:32
11楼
| ||||
回复楼上,确实可以
| ||||
#include<algorithm>
#include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<ctime> #include<cmath> #include<map> #include<set> #define MAXX 501 using namespace std; int n,k,d,ans,f[MAXX][16*16*16*16+1],len[MAXX],p[MAXX][16]; void init(){ scanf("%d%d%d",&n,&d,&k); for(int i=1;i<=n;++i){ scanf("%d",&len[i]); for(int j=1;j<=len[i];++j)scanf("%d",&p[i][j]); } } bool check(int j){ int num=0; while(j){ num+=(j&1); j>>=1; } if(num>k)return 0; return 1; } void findanswer(){ for(int i=1;i<=n;++i){ for(int j=0;j<=(1<<d);++j){ if(!check(j))continue; int jj=j; for(int h=1;h<=len[i];++h)jj=jj|(1<<(p[i][h]-1)); if(check(jj))f[i][jj]=max(f[i-1][jj],f[i-1][j]+1);//挤或不挤 f[i][j]=max(f[i][j],f[i-1][j]); ans=max(ans,max(f[i][j],f[i][jj])); } } printf("%d",ans); return; } int main(){ freopen("disease.in","r",stdin); freopen("disease.out","w",stdout); init(); findanswer(); return 0; } | ||||
回应楼上↑:这就是只状压,不dp的写法 =-=
| ||||
此题可以只有状压,没有dp。
kito
2016-10-28 06:18
7楼
| ||||
f[i]代表疾病状态为i的情况下最多有多少只羊
| ||||
| ||||
(震惊的)状压
|
天啊,真是不幸!最近在农夫 John 的农场上有 D(1<=D<=15) 种疾病 ( 疾病的编号为 1..D) 在奶牛当中流行。 John 想要给他的 N(1<=N<=1000) 头奶牛挤牛奶。挤出来的牛奶都被放在一个罐子里面。如果这些牛奶中包含了超过 K(1<=K<=D) 种的疾病,那么这些牛奶就要全部被丢弃掉了(浪费啊 -_-! )。 John 应该给这 N 头奶牛当中的哪些奶牛挤奶,才能使得牛奶不被丢弃,并且挤牛奶的数量最多呢?
第一行:三个整数 N,D 和 K
接下来有 N 行:这当中的第 i 行描述了第 i 个奶牛得病的信息。第一个数字 p ,表示第 i 头奶牛得了 p 种病,接下来有 p 个数字表示这些病的编号。如果 p 等于 0 ,表明这头奶牛很健康。
输出 John 最多可以给多少头奶牛挤牛奶。
6 3 2 0 1 1 1 2 1 3 2 2 1 2 2 1
5
John 最多可以给 5 头奶牛挤牛奶。他们的编号分别为 1,2,3,5,6. 此时这些牛奶中只包含 2 种疾病,编号为 1 , 2 。疾病种数不超过 K=2.