HDU 5119 Happy Matt Friends(DP)

2015-11-21 00:59:20 · 作者: · 浏览: 5

?

题意:

给定n个数,求从中选出任意个数异或起来值大于m的方案数。

?

分析:

动态规划,设dp[i][j] 表示第几次选第i个数的时候异或起来

值为j的方案数。dp[i][j^a[i]]+=dp[i][j];但是对空间有要求

我们可以用滚动数组来写。

?

代码如下:

#include 
  
   
#include 
   
     #include 
    
      using namespace std; const int maxn = 1<<20; typedef long long LL; LL dp[2][maxn]; int a[50]; int main() { int t,n,m,cas=1; scanf(%d,&t); while(t--){ scanf(%d%d,&n,&m); for(int i=0;i
     
      

?