提高代码的性能

时间:2015-12-09 07:31:23

标签: c++ performance optimization

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值。

1 个答案:

答案 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];