题目一看就是标准的01背包,只需要在计算前把价格和重要度先计算了就好
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; int max(int a, int b){ return a > b ? a : b; } int main() { int n, m; cin >> n >> m; int cost[26] = { 0 }; int value[26] = { 0 }; for (int i = 0; i < m; i++){ int t; cin >> cost[i] >> t; value[i] = t*cost[i]; } int temp[30001] = { 0 }; for (int i = 0; i < m; i++){ for (int j = n; j - cost[i] >= 0; j--){ temp[j] = max(temp[j], temp[j - cost[i]] + value[i]); } } cout << temp[n] << endl; return 0; }
来源:https://www.cnblogs.com/Vetsama/p/12288290.html