Gravatar
FoolMike
积分:5200
提交:1165 / 2240
k=22左右似乎只能集合并卷积卡常了

Gravatar
HZOI_蒟蒻一只
积分:1519
提交:319 / 790
正反dp是个玄学……

Gravatar
Herian
积分:594
提交:119 / 361
k>=0 不是>=1

Gravatar
xzz_233
积分:358
提交:92 / 288
回复楼上,确实可以

Gravatar
hee
积分:644
提交:137 / 414
#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;
}

Gravatar
Phosphorus15
积分:178
提交:63 / 136
回应楼上↑:这就是只状压,不dp的写法 =-=

Gravatar
kito
积分:2514
提交:693 / 1285
此题可以只有状压,没有dp。

Gravatar
Go灬Fire
积分:3416
提交:1738 / 3778
f[i]代表疾病状态为i的情况下最多有多少只羊

Gravatar
Magic_Sheep
积分:2288
提交:647 / 1317

Gravatar
sxysxy
积分:2491
提交:603 / 1120
(震惊的)状压

Gravatar
安呐一条小咸鱼。
积分:1939
提交:751 / 1825
for(int i=1) i=1写成i=i跪了N次

Gravatar
HouJikan
积分:1856
提交:596 / 1973
QAQ下标真是个烦人的东西

Gravatar
QhelDIV
积分:2334
提交:638 / 1737
如果D的范围大一点,就像网络流了