两个dp数组,一个记录最多的mm数量
一个dp数组,记录在最多的mm数量下的最短时间。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 999;
int num[N][N];
int n;
int f[N][N];
int rmb[N],rp[N],ti[N];
int main(){
cin >> n;
for(int i = 1; i<= n; i++){
cin >> rmb[i] >> rp[i] >> ti[i];
}
int m,r;
cin >> m >> r;
for(int i = 1; i <= n; i++){
for(int j = m; j >= rmb[i]; j--){
for(int k = r; k >= rp[i]; k--){
if(num[j][k] < num[j-rmb[i]][k-rp[i]] + 1){
num[j][k] = num[j - rmb[i]][k - rp[i]] + 1;
f[j][k] = f[j - rmb[i]][k - rp[i]] + ti[i];
}
else if(num[j][k] == num[j - rmb[i]][k-rp[i]] + 1){
f[j][k] = min(f[j][k], f[j - rmb[i]][k - rp[i]] + ti[i]);
}
}
}
}
cout << f[m][r] << endl;
return 0;
}