题意:给出两个数,n,m,问1~m中的数组成n,有多少种方法?

  这题其实就相当于 UVA 674 Coin Change,求解一样
  只不过数据很大,需要用到高精度运算。。。

后来还看了网上别人的解法,是将大数转化成高位和低位两部分处理

代码一:用数组存储数据的每个位

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
const int maxn=;
long long dp[maxn][]; //增加一维存储每一位的数
int n,k;
int main() { while(scanf("%d%d",&n,&k)!=EOF) {
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=; i<=k; i++) {
for(int j=i; j<maxn; j++) {
//原本就直接写了dp[j]+=dp[j-i],不WA才怪了。。。
for(int z=;z<;z++){
dp[j][z]=dp[j][z]+dp[j-i][z];
if(dp[j][z]>){
dp[j][z]-=;
dp[j][z+]++;
}
}
}
}
int idx=;
while(dp[n][idx]==)
idx--;
for(int i=idx;i>=;i--)
printf("%d",dp[n][i]);
printf("\n");
}
return ;
}

代码二:将大数分成两部分,高位部分和低位部分

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
const long long mod=;
const int maxn=;
long long dphigh[maxn]; //一个数的高位部分
long long dplow[maxn]; //一个数的低位部分
int n,k;
int main() { while(scanf("%d%d",&n,&k)!=EOF) {
memset(dphigh,,sizeof(dphigh));
memset(dplow,,sizeof(dplow));
dplow[]=;
for(int i=; i<=k; i++) {
for(int j=i; j<maxn; j++) {
dphigh[j]+=dphigh[j-i];
dplow[j]+=dplow[j-i];
dphigh[j]+=(dplow[j])/mod;
dplow[j]=dplow[j]%mod;
}
}
if(dphigh[n])
printf("%I64d",dphigh[n]);
printf("%I64d\n",dplow[n]);
}
return ;
}

POJ 3181 Dollar Dayz (完全背包,大数据运算)的更多相关文章

  1. POJ 3181 Dollar Dayz(全然背包+简单高精度加法)

    POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...

  2. POJ 3181 Dollar Dayz ( 完全背包 && 大数高精度 )

    题意 : 给出目标金额 N ,问你用面额 1~K 拼成 N 的方案有多少种 分析 : 完全背包的裸题,完全背包在 DP 的过程中实际就是列举不同的装填方案数来获取最值的 故状态转移方程为 dp[i] ...

  3. POJ 3181 Dollar Dayz && Uva 147 Dollars(完全背包)

    首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_p ...

  4. poj 3181 Dollar Dayz(完全背包)

    Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5419   Accepted: 2054 Descr ...

  5. poj 3181 Dollar Dayz(求组成方案的背包+大数)

    可能nyist看见加的背包专题我老去凑热闹,觉得太便宜我了.他们新加的搜索专题居然有密码. 都是兄弟院校嘛!何必那么小气. 回到正题,跟我写的上一篇关于求组成方案的背包思路基本一样,无非就是一个二维费 ...

  6. POJ 3181 Dollar Dayz 【完全背包】

    题意: 给出两个数,n,m,问m以内的整数有多少种组成n的方法完全背包+大数划分 思路: dp[i][j] := 用i种价格配出金额j的方案数. 那么dp[i][0] = 1,使用任何价格配出金额0的 ...

  7. POJ 3181 Dollar Dayz(高精度 动态规划)

    题目链接:http://poj.org/problem?id=3181 题目大意:用1,2...K元的硬币,凑成N元的方案数. Sample Input 5 3 Sample Output 5 分析: ...

  8. poj 3181 Dollar Dayz (整数划分问题---递归+DP)

    题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i ...

  9. POJ 3181 Dollar Dayz 01全然背包问题

    01全然背包问题. 主要是求有多少种组合.二维dp做的人多了,这里使用一维dp就能够了. 一维的转换方程:dp[j] = dp[j-i] + dp[j];当中i代表重量,j代表当前背包容量. 意思就是 ...

随机推荐

  1. chattr 与 lsattr 命令详解

    PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的li ...

  2. golang与C交互:cgo

    1. 在Go中引用C代码很简单, 在 import "C"前用注释引入标准的C代码, 然后使用C.xxx的伪包引用C代码空间的标识符即可. 需要注意, import"C& ...

  3. 关于跨域响应头Access-Control-Allow-Headers的一些说明

    在跨域PreFlight的过程中,Options请求会返回一个响应头,如果服务器返回了这个响应头,则允许用户发起GET.POST.HEAD这三个简单方法的请求,如需发起其他形式的请求则需要显示地在 A ...

  4. Knockout应用开发指南 第一章:入门

    2011-11-21 14:20 by 汤姆大叔, 20165 阅读, 17 评论, 收藏,  编辑 1    Knockout简介 (Introduction) Knockout是一个轻量级的UI类 ...

  5. asp.net web.config 经典模式和集成模式相关配置

    <?xml version="1.0"?> <configuration> <!--IIS经典模式下使用--> <system.web&g ...

  6. SqlParameter[] 添加

    protected void Button1_Click(object sender, EventArgs e) { string strSql="insert into Invoice_R ...

  7. 5方与5W

    方案:方位(角色).方向.方针.方式.方法 解答5W2H 轻重.缓急.深浅

  8. 关于网站IIS日志分析搜索引擎爬虫说明

    正文:iis默认的日志文件在C:\WINDOWS\system32\LogFiles中,下面是Seoer惜缘的服务器日志,通过查看,就可以了解搜索引擎蜘蛛爬行经过,如: 2008-08-19 00:0 ...

  9. /lib64/libc.so.6: version `GLIBC_2.14' not found问题

    <备忘> 参考文章: https://my.oschina.net/zhangxu0512/blog/262275 问题答疑: http://blog.sina.com.cn/s/blog ...

  10. jQuery Dialog弹出层对话框插件

    Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...