সোমবার, ৩ জুন, ২০১৯

UVA 10616 - Divisible Group Sums

#include<bits/stdc++.h>
using namespace std;
int n,m,d,q;
int ar[205],vis[205][205][15];
int dp(int i,int sum,int c)
{
    if(c==m&&sum==0)
        return 1;
    if(c==m&&sum!=0)
        return 0;
    if(i==n)
        return 0;
    if(vis[i][sum][c] != -1)
        return vis[i][sum][c];
    vis[i][sum][c] = dp(i+1, sum%d, c) + dp(i+1, (sum+ar[i])%d, c+1);
    return vis[i][sum][c];
}
int main()
{
    int i, j, res;
    j = 1;
    while(cin>>n>>q)
    {
        if(n==0&&q==0)
            break;
        for(i=0;i<n;i++)
        {
            scanf("%d",&ar[i]);
        }
        printf("SET %d:\n", j);
        for(i = 0; i < q; i++)
        {
            scanf("%d%d",&d,&m);
            memset(vis,-1,sizeof(vis));
            res = dp(0, 0, 0);
            printf("QUERY %d: %d\n", i+1, res);
        }
        j++;
    }
    return 0;
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...