Wikioi 1297硬币 (二维完全背包)
来源:互联网 发布:法律援助 知乎 编辑:程序博客网 时间:2024/06/06 09:30
【题意】题目链接:http://www.wikioi.com/problem/1297/ 中文题,不解释
【分析】一开始用一维完全背包去做,怎么也想不到,后来看了大神的做法,理解了;是这样的:要用一个二维数组dp[i][j]表示在重量为i,面值为j的组合是否存在;然后就是用二维完全背包做;具体看代码注释。
【AC代码】12ms
#include <cstdio>#include <algorithm>using namespace std;#define MAXN 110#define MAXV 2510int main (){ int c, n; while(~scanf ("%d%*c%d%*c", &c, &n)) { int v, l, r, ans = 0, len = 0, maxv = 0; bool dp[MAXN][MAXV] = {0};//dp[i][j]表示在重量为i,面值为j的组合是否存在 dp[0][0] = true; for (int i = 0; i < n; i++)//硬币数 { scanf ("%d %d %d%*c", &v, &l, &r); for (int j = l; j <= r; j++)//把硬币分解为重量为l~r的硬币 { for (int k = j; k <= c; k++)//完全背包 枚举重量 { for (int m = 0; m <= maxv; m++)//完全背包枚举面值,因为最大面值不确定,所以需要更改 { if (dp[k-j][m])//确保是恰好装满当前背包大小k { dp[k][m+v] = true;//m+v是放入当前硬币之后的价值 maxv = max(maxv,m+v); } } } } } //统计当总重量为c(也就是恰好装满背包)时出现的所有不同的面值数 for (int i = 0; i <= maxv; i++) { if (dp[c][i]) ans++; } printf ("%d\n", ans); } return 0;}
0 0
- Wikioi 1297硬币 (二维完全背包)
- 硬币找零 完全背包
- 硬币找零 完全背包
- nyoj995硬币找零完全背包
- 硬币找零(完全背包)
- NYOJ995 硬币找零(完全背包)
- hdu2159二维完全背包
- hdu2159 二维完全背包
- hdu2159 二维完全背包
- FATE二维完全背包
- 二维的完全背包
- 【二维完全背包】FATE
- hdu2159FATE【二维完全背包】
- hdu3127WHUgirls【二维完全背包】
- 二维完全背包
- 完全背包:二维数组
- HDU2194 二维完全背包
- tyvj p1214硬币问题(完全背包)
- 【剑指offer】和为定值的两个数
- Javascript 对象方式实现命名参数调用(上):原理和手动实现
- 【存储管理】内核缓冲区的管理概述
- 响应式 jQuery Slider 插件: bxSlider
- DAY20--java中的反射机制常用知识点总结
- Wikioi 1297硬币 (二维完全背包)
- Bash的例子
- DAY21--java中的网络编程TCP/IP常用知识点总结
- poj 1973 erf
- oracle group by rollup,decode,grouping,nvl,nvl2,nullif,grouping_id,group_id,grouping sets,RATIO_TO
- 代码生成(Code Generation with Bake)
- Cadence 中A pin with name ‘GND' is duplicated on the part 报错的解决
- Android中的显示单位
- hdu2147 kiki's game (博弈论问题 NP打表)