uva 10616 Divisible Group Sums

被坑了,有负数

#include <iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int num[210],a[210];

long long dp[11][25];

int N,Q,D,M,cas=1;



int main()

{

    while(scanf("%d%d",&N,&Q)==2,N+Q)

    {

        for(int i=0;i<N;i++)

        scanf("%d",&num[i]);

        printf("SET %d:\n",cas++);

        for(int i=1;i<=Q;i++)

        {

            scanf("%d%d",&D,&M);

            memset(dp,0,sizeof(dp));

            dp[0][0]=1;

            for(int j=0;j<N;j++)

            a[j]=(num[j]%D+D)%D;



            for(int j=0;j<N;j++)

            {

                for(int k=M-1;k>=0;k--)

                for(int t=0;t<D;t++)

                dp[k+1][(t+a[j])%D]+=dp[k][t];

            }

            printf("QUERY %d: %lld\n",i,dp[M][0]);

        }

    }

    return 0;

}

  

你可能感兴趣的:(visible)