[01背包]vijos1104 采药(01背包模板
2016-07-29 10:43
211 查看
P1104采药
Accepted
标签:NOIP普及组2005[显示标签]
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
样例输入1[复制]
样例输出1[复制]
每个测试点1s
思路:
裸的01背包,状态转移方程:(二维)f[i][j] = max{f[i-1][j], f[i-1][j-c[i]]+w[i]};
(一维)f[j] = max{f[j],f[j-c[i]]+w[i]};
代码1(二维):
代码2(一维):
Accepted
标签:NOIP普及组2005[显示标签]
描述
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗?
格式
输入格式
输入的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。输出格式
输出包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
样例1
样例输入1[复制]
70 3 71 100 69 1 1 2
样例输出1[复制]
3
限制
每个测试点1s思路:
裸的01背包,状态转移方程:(二维)f[i][j] = max{f[i-1][j], f[i-1][j-c[i]]+w[i]};
(一维)f[j] = max{f[j],f[j-c[i]]+w[i]};
代码1(二维):
#include <iostream> #include <stdio.h> using namespace std; //f[i][j] = max{f[i-1][j], f[i-1][j-c[i]]+w[i]} const int N = 110; int f ;//f[j]前i个草药j时间最大价值(i由for循环体现) int c ;//时间 int w ;//价值 int main() { int t, m; int i, j; scanf("%d%d", &t, &m); for(i = 1; i <= m; i++) scanf("%d%d", &c[i], &w[i]); for(i = 1; i <= m; i++) for(j = 1; j <= t; j++) { if(j >= c[i]) f[i][j] = max(f[i-1][j],f[i-1][j-c[i]]+w[i]); else f[i][j] = f[i-1][j]; } printf("%d", f[m][t]); return 0; }
代码2(一维):
#include <iostream> #include <stdio.h> using namespace std; //f[j] = max{f[j],f[j-c[i]]+w[i]} const int N = 110; int f ;//f[j]前i个草药j时间最大价值(i由for循环体现) int c ;//时间 int w ;//价值 int main() { int t, m; int i, j; scanf("%d%d", &t, &m); for(i = 1; i <= m; i++) scanf("%d%d", &c[i], &w[i]); for(i = 1; i <= m; i++) for(j = t; j >= c[i]; j--) { f[j] = max(f[j], f[j-c[i]]+w[i]); } printf("%d", f[t]); return 0; }
相关文章推荐
- Vijos 1104 采药 (整理:01背包详解)
- vijos1025 小飞侠的游园方案(01背包模板)
- [DP][01背包]01\完全\多重背包模板
- vijos1104采药(01背包)
- vijos 1104 01背包
- NYOJ 题目860 又见01背包 (特别版01背包)
- P1060 开心的金明 水水的01背包模板
- 01背包模板和完全背包模板
- 又见01背包 01背包 小技巧
- poj3624-Charm Bracelet(01背包模板题)
- 01背包 一维数组写的01背包
- nyoj860--又见01背包(01背包的另一种形态)
- Tyvj 1005 采药问题之01背包
- 混合背包模板(01+多重+完全)
- 01背包模板、完全背包 and 多重背包(模板)
- 01背包模板(2602)
- vijos1059 积木城堡[n年浙江省队第X轮](背包的方案总数 or 01背包)
- 01背包,完全背包,多重背包 ,模板代码
- Vijos 1104题:采药
- vijos1059 积木城堡[n年浙江省队第X轮](背包的方案总数 or 01背包)