sicily 1342 (0/1背包问题)

来源:互联网 发布:多多印 知乎 编辑:程序博客网 时间:2024/06/08 04:42
//首次接触背包问题,理解起来还是有点吃力!需要多练习! 
#include "iostream"#include "cmath"using namespace std;int total[26][300010];int main(){int N, m;while (cin >> N >> m){int *price = new int[m+1];int *degree = new int[m+1];for (int i = 0; i <= m; i++)for (int j = 0; j <= N; j++)total[i][j] = 0;for (int i = 1; i <= m; i++)cin >> price[i] >> degree[i];int ans = 0;for (int i = 1; i <= m; i++)for (int j = 1; j <= N; j++){if (price[i] <= j){if (total[i-1][j] < total[i-1][j-price[i]] + price[i] * degree[i])//动态规划的公式!要理解透,熟悉运用!{total[i][j] = total[i-1][j-price[i]] + price[i] * degree[i];    ans = max(total[i][j], ans);}else{total[i][j] = total[i-1][j];ans = max(total[i][j], ans);}}else {total[i][j] = total[i-1][j];ans = max(total[i][j], ans);}}cout << ans << endl;}}

原创粉丝点击