HDU - 3496 Watch The Movie(01背包)
2015-09-24 21:16
369 查看
题目大意:有N个碟片,你只能选择M个进行播放,最多能观看L分钟。给出每个碟片的播放时间和看完后能收获的快乐值,问能否看完这M个碟片,如果能全部看完的话,输出最大快乐值
解题思路:用dp[i][j]表示i分钟看完j个碟片的最大快乐值,然后背包即可
解题思路:用dp[i][j]表示i分钟看完j个碟片的最大快乐值,然后背包即可
[code]#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 110; const int L = 1010; int n, m, l; int Time , rate ; int dp[L] ; void init() { scanf("%d%d%d", &n, &m, &l); for (int i = 0; i < n; i++) scanf("%d%d", &Time[i], &rate[i]); } void solve() { memset(dp, -1, sizeof(dp)); for (int i = 0; i <= l; i++) dp[i][0] = 0; for (int i = 0; i < n; i++) for (int j = l; j >= Time[i]; j--) for (int k = m - 1; k >= 0; k--) if (dp[j - Time[i]][k] != -1) dp[j][k + 1] = max(dp[j][k + 1], dp[j - Time[i]][k] + rate[i]); int ans = 0; for (int i = 0; i <= l; i++) ans = max(dp[i][m], ans); printf("%d\n", ans); } int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } return 0; }
相关文章推荐
- 二级指针的申请跟删除(基于C++的new机制)
- HttpClient使用详解
- [转]Android学习笔记:TabHost 和 FragmentTabHost
- 【Android】loadData与loadDataWithBaseURL的区别
- [sicily]1157. The hardest problem
- CF 579A (二进制拆分)
- 使用Application实现Fragment之间的传值
- 关于mybatis中基本类型条件判断问题
- Windows 7 and Ubuntu install issues
- 题目:利用递归求1+2+3...100的和
- 杭电2066-一个人的旅行(最短路径)
- 让你彻底理解hashCode的作用
- Insertion Sort List
- POJ1860 Currency Exchange 最短路bellman-ford
- 2016校招记
- 配制nginx
- Codevs p1014 装箱问题
- 敢创业但不敢上台演讲?
- Halcon学习之高斯混合模型
- lintcode-Segmemt Tree Build II-439