poj 3181 Dollar Dayz

来源:互联网 发布:win10不支持的软件 编辑:程序博客网 时间:2024/06/10 08:31

题意:农夫约翰有N元钱,市场上有价值1……K的商品无限个,求所有的花钱方案?

分析:完全背包+模拟大数,注意加前导0


#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAXN 1005#define MAXM 105long long const MOD = 1e17;long long dp1[MAXN],dp2[MAXN];int main(){    int n,k;    while(scanf("%d%d",&n,&k) != EOF)    {        memset(dp1,0,sizeof(dp1));        memset(dp2,0,sizeof(dp2));        dp1[0] = 1;        for(int i = 1;i <= k;i++)            for(int j = i;j <= n;j++)            {                dp2[j] = (dp2[j] + dp2[j - i]) + (dp1[j] + dp1[j - i]) / MOD;                dp1[j] = (dp1[j] + dp1[j - i]) % MOD;            }        if(dp2[n])printf("%lld%012lld\n",dp2[n],dp1[n]);        else printf("%lld\n",dp1[n]);    }}


0 0
原创粉丝点击