1

私はこのコードを持っています:

#include<iostream>
#include<algorithm>

#define mod 1000000007

using namespace std;
unsigned long long int pow(int);
unsigned long long int binomialCoeff(int ,int );
int i,j;
int T[1000][1000];

int main()
{
    unsigned long long int t,k,n,ans;
    cin>>t;
    while(t--)
    {
        ans=0;
        cin>>n;
        int a[n];
        for(i=0;i<n;i++)
        cin>>a[i];

        if(n%2==0)
            ans=(pow(n-1)-((binomialCoeff(n,n/2))/2))%mod;
        else
            ans=pow(n-1)%mod;

        printf("%lld\n",ans);
    }

    system("pause");
}

unsigned long long int binomialCoeff(int na,int rb)
{

    for(i=0;i<na-rb+1;i++)
        **T[i,0]=1;**

    for(i=0;i<rb+1;i++)
        **T[i,i]=1;**

    for(j=1;j<rb+1;j++)
    {           
        for(i=j+1;i<na-rb+j+1;i++)
            **T[i,j]=T[i-1,j-1]+T[i-1,j];**
    }
    return (T[na,rb]);
}


unsigned long long int pow(int n)
{
    int k;

    if(n==0)
        return 1;
    else if(n%2==0)
        {k=pow(n/2);return ((k%mod)*(k%mod))%mod;}
    else
        {k=pow(n/2);return ((((k%mod)*(k%mod))%mod)*2)%mod;}
}

私はこのアルゴリズムを持っています:

2^(n-1) - ((1+(-1)^n)/4)*binomial(n, n/2)

...この質問の場合

しかし、私のコンパイラでは、コンパイルエラーが発生します。

In function `long long unsigned int binomialCoeff(int, int)': 
   incompatible types in assignment of `int' to `int[1000]' 
   invalid operands of types `int[1000]' and `int[1000]' to binary `operator+' 
   invalid conversion from `int*' to `long long unsigned int' 
4

1 に答える 1

4

配列アクセス構文が間違っています。試す:

T[i][0] = 1;

これは、多次元配列のすべての使用法に当てはまります。たとえば、後で次のようにします。

// Bad code from original post
T[i,j]=T[i-1,j-1]+T[i-1,j]

次のように記述します。

T[i][j]=T[i-1][j-1]+T[i-1][j];
于 2013-02-08T18:53:02.470 に答える