首页 > 代码库 > HDU 5199

HDU 5199

被一个学长逼着做的题。。。谢谢他了~  题中dp[i][j] i即为第i个数,j为当前输入的数能xor到的数

同时一个数有两种选择,1.not xor  2.xor

最大的j不会超过11...11b(20个)=1048575   题目中用了1050000

 1 #include <stdio.h> 2 #include <string.h> 3 #define MM 50 4 __int64 dp[MM][1050000]; 5 int num[MM]; 6 int main() 7 { 8     int n,m,t,j,i; 9     scanf("%d",&t);10     for(int cas=1;cas<=t;cas++)11     {12         __int64 ans=0;13         memset(dp,0,sizeof (dp));14        15         scanf("%d %d",&n,&m); 16         dp[0][0]=1;17         for( i=1;i<=n;i++)18         {19             scanf("%d",&num[i]);20         }21         for(i=1;i<=n;i++)22         {23             for(j=0;j<1050000;j++)24             {25                 dp[i][j]+=dp[i-1][j];   //not xor26                 long long nj=j^num[i];27                 dp[i][nj]+=dp[i-1][j];  //xor28             }29         }30         for(i=m;i<1050000;i++)31         {32             ans+=dp[n][i];33         }34 35         printf("Case #%d: %I64d\n",cas,ans );36 37     }38     return 0;39 }

 

HDU 5199