#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1e3 + 10;
int n,m,kk;
int f[N][N];
int g[N];
int w1[N],w2[N],v[N];
int main(){
scanf("%d%d",&n,&m);
scanf("%d",&kk);
for(int i = 1; i <= kk; i++){
cin >> w1[i] >> w2[i] >> v[i];
}
memset(f,0x3f,sizeof(f));
f[0][0] = 0;
int oq = 0, dq = 0;
for(int i = 1; i <= kk; i++){
for(int j = n; j >= 0; j--){
for(int k = m; k >= 0; k--){
//if(f[j - w1[i]][k - w2[i]] + v[i] < f[j][k]){
// oq += w1[i];
// dq += w2[i];
// }
f[j][k] = min(f[j][k], f[max(0,j - w1[i])][max(0,k - w2[i])] + v[i]);
}
}
}
cout << f[n][m] << endl;
return 0;
}
背包求法:
体积至少是j。(赋值为无穷,第一个0值为0.
体积最多是j。(常用,全局变量赋值为0)
体积恰好是j。(赋值为负无穷,初始化为0)
大佬的总结