題目連結 http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=b031。
和 b028: 忙碌的超商店員 、 b029: 福袋!福袋!、b030: 隨選視訊一樣,用 Dynamic Programming 來解。
底下演算法為參考 「演算法筆記的 Unbounded Knapsack Problem」 而來的:
程式碼:
- #include <iostream>
- #include <cstring>
- using namespace std;
- int main()
- {
- int n, m;
- cin >> n >> m;
- int v[n], w[m];
- for(int i = 0; i < n; i++)
- {
- cin >> w[i] >> v[i];
- }
- int foodCost[m+1];
- memset(foodCost, 0, sizeof(foodCost));
- for (int i = 0; i < n; ++i) // 窮舉每種食物
- {
- for (int j = w[i]; j <= m; ++j)// 窮舉每種食量
- {
- foodCost[j] = max(foodCost[j], foodCost[j - w[i]] + v[i]);
- }
- }
- cout << foodCost[m] << endl;
- return 0;
- }
沒有留言:
張貼留言