博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2347 砝码称重 & P1474 货币系统 Money Systems
阅读量:6038 次
发布时间:2019-06-20

本文共 1246 字,大约阅读时间需要 4 分钟。

背包方案数模板题练习

第一道题是另一道也叫做“砝码称重”的前置技能,第二道题是我搜背包方案数的时候出来的。

两道题有一点区别,就是多重(01)背包和完全背包。

第一道题因为数据水,所以多重背包也能过。但是也要学会如何写多重背包!!!

第二道题是完全背包,每一种货币可以拿无穷多次。

这种背包可以理解为价值为0,只有重量。

直接给代码:

第一份的:

#include
const int b[] = {0, 1, 2, 3, 5, 10, 20};int a[7];int weight[100005], tot;int dp[100005];int sum;int main(){ for(int i = 1; i <= 6; i++) { scanf("%d", &a[i]); for(int j = 1; j <= a[i]; j++) { weight[++tot] = b[i]; } sum += a[i] * b[i]; } dp[0] = 1; for(int i = 1; i <= tot; i++) { for(int j = sum; j >= weight[i]; j--) { dp[j] += dp[j - weight[i]]; } } int ans = 0; for(int i = 1; i <= sum; i++) if(dp[i]) ans++; printf("Total=%d\n", ans); return 0;}

第二份的:

#include
#define ll long longconst int maxv = 26, maxn = 10005;ll weight[maxv];ll dp[1000005];int v, n;int main(){ scanf("%d%d", &v, &n); for(int i = 1; i <= v; i++) { scanf("%lld", &weight[i]); } dp[0] = 1; for(int i = 1; i <= v; i++) { for(int j = weight[i]; j <= 10000; j++) { dp[j] += dp[j - weight[i]]; } } printf("%lld\n", dp[n]); return 0;}

转载于:https://www.cnblogs.com/Garen-Wang/p/9800949.html

你可能感兴趣的文章
关于jfreechart中文标题乱码的解决 /usr/share/fonts/truetype/ /usr/share/fonts/truetype/
查看>>
网页的学习语言将仿佛使你生活更动人
查看>>
C++静态变量内存分配,编译阶段,解密
查看>>
Gartner:XenServer你是领导者!
查看>>
我的友情链接
查看>>
专业程序员必知必会的技巧:驯服复杂代码
查看>>
android ndk cmake Invalid Android ABI
查看>>
centos 配置双机ssh信任
查看>>
nginx配置.htaccess伪静态
查看>>
如何用标签打印软件制作物料标识卡
查看>>
雷林鹏分享:二级目录配置CI应用
查看>>
雷林鹏分享:CodeIgniter 防止跨站请求伪造攻击
查看>>
612.1.004 ALGS4 | Elementary Sorts - 基础排序算法
查看>>
C指针(二)
查看>>
AS3.0中单例模式的实现
查看>>
CentOS 7----Apache基于域名的虚拟主机配置
查看>>
实现地图放大覆盖物出现圆,缩小到一定级别变成其他形状
查看>>
程序员工作法
查看>>
获取百度网盘真实地址
查看>>
css常见问题及技巧
查看>>