#include<bits/stdc++.h> using namespace std; #define ll long long #define all(x) begin(x),end(x) ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } const int N=1e3+50; int a[N]; int dp[N][N]; const int mod=1e9+7; int main() { freopen("in.txt","r",stdin); int t=rd(); while(t--){ int n=rd(),d=rd(); for(int i=1;i<=n;i++) a[i]=rd(); memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int i=1;i<=n;i++){ for(int j=i;j>=1;j--) for(int k=1<<10;k>=0;k--){ if(dp[k][j-1]>0){ dp[k^a[i]][j]=(dp[k][j-1]+dp[k^a[i]][j])%mod; //printf("%d-%d-%d\n",i,j,k); //printf("k^a[i]:%d j:%d dp[k^a[i]][j]:%d\n",k^a[i],j,dp[k^a[i]][j]); } } //printf("%d\n",dp[0][i]); } //puts(""); ll ans=0; if(d>n)d=n; for(int i=0;i<=d;i++) ans=(dp[0][n-i]+ans)%mod; printf("%lld\n",ans); //printf("%d ",dp[0][n-i]); } return 0; } /* 3 5 2 1 1 2 3 4 6 3 1 2 4 7 1 2 */
2018acm山东省赛G
猜你喜欢
转载自blog.csdn.net/ujn20161222/article/details/80221045
今日推荐
周排行