#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int V, M, N; cin >> V >> M >> N; vector<int> volumes(N), masses(N), calories(N); for(int i = 0; i < N; ++i) { cin >> volumes[i] >> masses[i] >> calories[i]; } // dp[i][j][k] 表示在体积不超过i,质量不超过j的情况下,能够达到的最大卡路里值 vector<vector<vector<int>>> dp(V+1, vector<vector<int>>(M+1, vector<int>(N+1, 0))); for(int i = 1; i <= N; ++i) { for(int j = 0; j <= V; ++j) { for(int k = 0; k <= M; ++k) { // 如果当前食品的体积或质量超过了限制,则不能装入,最大卡路里与上一个食品相同 if(j < volumes[i-1] || k < masses[i-1]) { dp[j][k][i] = dp[j][k][i-1]; } else { // 如果可以装入,则比较不装入和装入该食品后的卡路里值,取最大值 dp[j][k][i] = max(dp[j][k][i-1], dp[j-volumes[i-1]][k-masses[i-1]][i-1] + calories[i-1]); } } } } cout << dp[V][M][N] << endl; return 0; } /************************************************************** Problem: 2075 User: zhengzihao Language: C++ Result: Accepted Time:1296 ms Memory:23448 kb ****************************************************************/