int original,dp[100001][2048],arr[100001];
cin>>original;
for(int i=0;i<100000;i++)
cin>>arr[i];
dp[0][original]=1;
for(int i=1; i<100000; i++)
{
for(int j=0; j<=1024; j++)
{
dp[i][j]=dp[i-1][j]+dp[i-1][j^arr[i]];
}
}
如何才能提高这个简单代码的性能,以发现有多少个数组元素的总组合可以用变量原始等于1023来计算XOR值。
答案 0 :(得分:0)
根据我的说法,你要求这件事
for(int i=0; i<n; i++)
{
occurence[arr[i]]++;
}
for(int i = 0; i < 1024; i++)
{
if(occurence[i]!=0)
{
tt_ways[i]=power(2,occurence[i]-1);
}
else
{
tt_ways[i]=0;
}
}
dp[0][original]=1;
if(tt_ways[0]!=0)
{
answer[0][tt]=tt_ways[0]+tt_ways[0];
}
for(int i=1; i<1024; i++)
{
for(int j=0; j<1024; j++)
{
const long long int temp =(tt_ways[i]*dp[i-1][j])%MOD;
if(tt_ways[i]==0)
{
dp[i][j]=(dp[i-1][j])%MOD;
}
else
{
dp[i][j]=(dp[i][j] + temp)%MOD;
dp[i][j^i]=(dp[i][j^i] + temp)%MOD;
}
}
}
cout<<dp[1023][0];