错误代码
#include<iostream>
#include<cstring>
using namespace std;
// f[i][j] 要达到f[i][j]至少要花费的体积
int f[30][100];
int main(){
int m, n, k; cin >> m>>n>>k;
memset(f, 0x3f, sizeof f);
f[0][0] = 0;
while(k--){
int a, b, c; cin >> a >> b >> c;
for(int i=m; i>0; i--){
for(int j=n;j>0; j--){
if(a>=i&&b>=j) f[i][j] = min(f[i][j], c);
if(i>=a&&j>=b) f[i][j] = min(f[i-a][j-b]+c, f[i][j]);
}
}
}
cout << f[m][n] << endl;
return 0;
}
正确代码
#include<iostream>
#include<cstring>
using namespace std;
// f[i][j] 要达到f[i][j]至少要花费的体积
int f[30][100];
int main(){
int m, n, k; cin >> m>>n>>k;
memset(f, 0x3f, sizeof f);
f[0][0] = 0;
while(k--){
int a, b, c; cin >> a >> b >> c;
for(int i=m; i>=0; i--){
for(int j=n;j>=0; j--){
f[i][j] = min(f[i][j], f[max(0, i - a)][max(0, j-b)] +c);
}
}
}
cout << f[m][n] << endl;
return 0;
}
错误原因
没有考虑罐某一项为零的情况