先以金額建議一個陣列,以dp[j] = 戰力 , j= 花費的金額 ,並做一個暫存去紀錄 {金額,戰力}
在一直去取max 更新陣列
以下程式給各位參考
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n,p;
cin >> m>> n >>p;
vector<int> dp(m+1,-1);
dp[0] = 0;
for(int i=0;i<n;i++)
{
vector<pair<int ,int >> player;
for(int i=1;i<=p;i++)
{
int a,b;
cin >> a>>b;
player.push_back({a,b});
}
vector<int> newdp = dp;
for(auto pp : player)
{
int cost = pp.first;
int power = pp.second;
//cout << cost<<" "<< power<<endl;
for(int j=0;j+cost<=m;j++)
{
if(dp[j] != -1) newdp[j+cost] = max(newdp[j+cost], dp[j] + power);
}
}
dp = newdp;
}
cout<< *max_element(dp.begin(), dp.end());
return 0;
}