今天的C怎么做?
求解
直接暴的 枚举带物品的方案 然后扫一遍统计 。。。最高复杂度 c(16,8)*2^16 貌似还达不到
谢了
//贴个代码。。 #include\"iostream\" #include\"cstdlib\" using namespace std; const int dat[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}; int cnt[65537]; int main(){ int n,m,k,kn,a,s; while(~scanf(\"%d%d%d\",&n,&m,&k)){ memset(cnt,0,sizeof(cnt)); for(int i=0;i<k;i++){ scanf(\"%d\",&kn); s=0; for(int j=0;j<kn;j++){ scanf(\"%d\",&a); s+=dat[a-1]; } // cout<<\"s=\"<<s<<endl; cnt[s]++; } int max=0; for(int i=0;i<65536;i++){ int cc=0; a=i; while(a){ if(a&1)cc++; a=a>>1; } if(cc!=m)continue; s=0; for(int j=0;j<=i;j++){ if((j|i)==i)s+=cnt[j]; } if(s>max)max=s; } printf(\"%d\\n\",max); } return 0; }
过了吗?貌似有bug,试试下面这组数据: Input 3 2 3 1 1 1 1 2 2 3 Output 2
可以过 ..有个地方再改下 j<=s_max 能优化一些