2013年10月15日 星期二

TIOJ 1043 F.名偵探蚵男

[DP]
久違的TIOJ




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#define ULLI unsigned long long int
using namespace std;
vector<int> stock;
ULLI dp[10001][100];
ULLI getdp(int a,int b)
{
    if((a<0)||(b<0))
        return 0;
    if(a==0)
        return 1;
    if(b==0)
        return (a%stock[0]==0);
    return dp[a][b];
}
int main()
{
    int n,p;
    while(scanf("%d %d",&n,&p)!=EOF)
    {
        stock.clear();
        memset(dp,0,sizeof(dp));
        if(!n&&!p)
            break;
        int inp;
        for(int lx=1;lx<=n;lx++)
        {
            scanf("%d",&inp);
            if(inp<=p)
                stock.push_back(inp);
        }
        for(int lx=0;lx<stock.size();lx++)
            for(int lp=0;lp<=p;lp++)
                dp[lp][lx]=getdp(lp,lx-1)+getdp(lp-stock[lx],lx);
        printf("%I64u\n",dp[p][stock.size()-1]);
    }
    return 0;
}

沒有留言:

張貼留言