今天的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 能优化一些 
© 2015 HUST ACMICPC TEAM. All Right Reserved.