Sicily 1146. 采药 解题报告(0-1背包问题)
2013-12-10 23:20
274 查看
题目传送门:1146. 采药
思路:
典型的0-1背包问题,不像分数背包问题可以用贪心算法,所以只能用动态规划。dp[i][j]表示在限定时间j内,只从前i个山药里面取能得到的最大价值。dp的构建同样采用自底向上的方法。
对于第i个山药,考虑取与不取,有dp[i - 1][j]和dp[i - 1][j - t[i]] + v[i]两种情况,取较大值即可。
代码:
思路:
典型的0-1背包问题,不像分数背包问题可以用贪心算法,所以只能用动态规划。dp[i][j]表示在限定时间j内,只从前i个山药里面取能得到的最大价值。dp的构建同样采用自底向上的方法。
对于第i个山药,考虑取与不取,有dp[i - 1][j]和dp[i - 1][j - t[i]] + v[i]两种情况,取较大值即可。
代码:
#include<iostream> #include<vector> using namespace std; int main(){ int t,m; cin >> t >> m; int times[m],values[m]; for(int i = 0;i < m;i++) cin >> times[i] >> values[i]; int dp[m + 1][t + 1]; for(int i = 0;i < t + 1;i++) dp[0][i] = 0; for(int i = 1;i < m + 1;i++){ for(int j = 0;j < t + 1;j++){ if(j >= times[i - 1]) dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - times[i - 1]] + values[i - 1]); else dp[i][j] = dp[i - 1][j]; } } cout << dp[m][t] << endl; return 0; }
相关文章推荐
- sicily1146-采药(背包问题)
- poj 2063 Investment(背包问题)(解题报告)
- poj 1041-Dividing解题报告-可行性背包问题
- 背包问题 3 多重背包 解题报告
- 背包问题 2 完全背包解题报告
- Backpack 解题报告 背包问题深入浅出
- HDU 3535 AreYouBusy 解题报告(背包问题)
- 0-1背包问题(动态规划) 解题报告
- Sicily 1146 采药(DP动态规划——01背包问题)
- Sicily 1153. 马的周游问题 解题报告
- 0-1背包问题,poj 3624 Charm Bracelet动态规划-解题报告,增加最优路径构建
- codevs 1025 选菜 背包问题 解题报告
- [sicily online]1146. 采药(0-1背包)
- NOIP模拟赛-旅行者问题 解题报告
- Sicily 1006. Team Rankings 解题报告
- bzoj 1052 覆盖问题 贪心 解题报告
- 装载问题(西农Oj) 解题报告
- 母函数简介及简单使用(附HDU 1284 钱币兑换问题 解题报告)
- poj 2406 Power Strings(字符问题)(解题报告)
- Sicily 2002. Feeding Time 解题报告