hdu 2660 Accepted Necklace dp / dfs
来源:互联网 发布:淘宝代运营团队 编辑:程序博客网 时间:2024/05/17 20:33
题目链接
题意:
给出 N 块 石头,从中 至多 选取 k 块(不能重复),重量不得超过 W,求最大价值
思路:
1.
dp 三重循环 最外层为 当前考虑的石头,里面两层为 取了多少块 和 重量,这两层先后顺序无所谓,总之都是从大到小
然而题意表述不清,以为一定要选取 k 块石头...事实上是至多。
AC代码如下:
#include <cstdio>#include <cstring>#define maxn 22int v[maxn], c[maxn], dp[maxn][1010], n, k;inline max(int a, int b) { return a > b ? a : b; }void work() { for (int i = 1; i <= n; ++i) scanf("%d%d", &v[i], &c[i]); int w; scanf("%d", &w); memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; ++i) { for (int j = k; j >= 1; --j) { for (int p = w; p >= c[i]; --p) { dp[j][p] = max(dp[j][p], dp[j - 1][p - c[i]] + v[i]); } } } printf("%d\n", dp[k][w]);}int main() { int T; scanf("%d", &T); while (scanf("%d%d", &n, &k) != EOF) work(); return 0;}
因为 N <= 22, K <= N, 可以直接 dfs
AC代码如下:
#include <cstdio>#include <cstring>#define maxn 22int v[maxn], c[maxn], dp[maxn][1010], n, k, ans, w;inline max(int a, int b) { return a > b ? a : b; }void dfs(int cnt, int tot, int cost, int val) { if (tot <= k && cost <= w) { ans = max(ans, val); if (tot == k) return; } for (int i = cnt + 1; i <= n; ++i) dfs(i, tot + 1, cost + c[i], val + v[i]);}void work() { for (int i = 1; i <= n; ++i) scanf("%d%d", &v[i], &c[i]); scanf("%d", &w); ans = 0; for (int i = 1; i <= n; ++i) dfs(i, 1, c[i], v[i]); printf("%d\n", ans);}int main() { int T; scanf("%d", &T); while (scanf("%d%d", &n, &k) != EOF) work(); return 0;}
阅读全文
0 0
- hdu 2660 Accepted Necklace(dfs、dp)
- hdu 2660 Accepted Necklace dp / dfs
- hdu 2660 Accepted Necklace DFS
- hdu 2660 Accepted Necklace(dp)
- HDU 2660 Accepted Necklace (DFS)
- HDOJ(HDU).2660 Accepted Necklace (DFS)
- 【DP】 HDU 2660 Accepted Necklace 限制背包
- hdu 2660 Accepted Necklace
- hdu-2660 Accepted Necklace
- hdu 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- hdu 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- hdoj 2660 Accepted Necklace【DFS】
- hdu 2660 Accepted Necklace(01-背包变形 || DFS)
- HDU 2660 Accepted Necklace(DFS解01背包)
- ThinkPHP 5.0 配置文件
- 调用系统时间
- 【树状数组--求逆序数(离散化)】poj2299 Ultra-QuickSort
- Groovy的灵活初始化与具名参数
- python 读写文本文件笔记
- hdu 2660 Accepted Necklace dp / dfs
- 采用Vivado HLS为视频处理实现中值滤波器和排序网络
- Python学习笔记之连接MySQLdb
- @property知多少
- 13扩展一个Greenplum System
- HDU5813 Elegant Construction
- Python--键值对配置文件处理
- 带有层号的先根遍历树存储基于plsql的代码实现
- 数组选择排序和冒泡排序