題意:
給定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