采药
2015-10-26 16:38
141 查看
题目描述
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
输入
输入文件medic.in的第一行有两个整数T(1
<= T <= 1000)和M(1
<= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出
输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
样例输入
样例输出
普通01背包问题,装与不装的状态。
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
输入
输入文件medic.in的第一行有两个整数T(1
<= T <= 1000)和M(1
<= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出
输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
样例输入
70 3 71 100 69 1 1 2
样例输出
3
普通01背包问题,装与不装的状态。
#include <stdio.h> const int maxn = 1005; int dp[maxn]; int main ( ) { int T, M, v, w; scanf ( "%d%d", &T, &M ); for ( int i = 0; i < M; i ++ ) { scanf ( "%d%d", &w, &v ); for ( int j = T; j >= w; j -- ) //将二维省略到一维从大到小 if ( dp[j-w]+v > dp[j] ) dp[j] = dp[j-w]+v; } printf ( "%d", dp[T] ); return 0; }
相关文章推荐
- SPI接口和串口
- 马云:永远不要行贿 拼的是真知才学
- 转:Java中abstract和interface的区别
- 【bzoj1562】【noi2009】【变换序列】【匈牙利算法】
- linux下oracle创建用户步骤
- Ajax入门学习
- 错误
- 第九周 项目1 猴子选大王(数组版)
- FreeRTOS的内存管理
- 正则表达式的贪婪匹配和非贪婪匹配
- mysql主从复制跳过错误
- test credit card account
- Linux 定时任务经典案例
- C++设计模式之桥接模式(改编自C++设计模式)
- Log4j详细使用教程
- BI之路学习笔记3--olap cube理解实例
- 第八周项目3——顺序串算法(1)
- shell
- iOS Framework
- 数据结构实践——顺序串算法