***POJ 3180 Dollar Dayz【大数处理】

来源:互联网 发布:excel数据统计分析方法 编辑:程序博客网 时间:2024/05/29 13:44

原题链接

思路:
动态规划。大数处理。高位是dp/mod,低位是dp%mod。

AC代码:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;//思路:参考完全背包问题。//因为数很大,long long也存不下,所以要分高低位 int n,m;long long int dp_low[1005],dp_high[1005];  //可使用i元时的方法数long long int mod = 1e18;int main(){    int i,j,k;    scanf("%d %d",&n,&m);    dp_low[0] = 1;    for(j = 1; j <= m; j++){        for(i = j; i <= n; i++){            dp_high[i] = dp_high[i] + dp_high[i-j];            dp_high[i] += (dp_low[i] + dp_low[i-j])/mod;            dp_low[i] = (dp_low[i] + dp_low[i-j])%mod;  //是否选价值j的工具         }    }    if(dp_high[n])  printf("%lld",dp_high[n]);    printf("%lld\n",dp_low[n]);     return 0;}
1 0