点击跳转例题
思路:就是01背包变型,多了一层循环
// #include <bits/stdc++.h> // #define int long long //(有超时风险) // #define PII pair<int,int> // #define endl '\n' // using namespace std; // const int N=2e6+10,M=5e2+10,mod=998244353,INF=0x3f3f3f3f; // int f[51][M][M]; // int h[M],t[M],k[M]; // signed main() // { // std::ios::sync_with_stdio(false); // std::cin.tie(nullptr); // int H,T,n;cin>>H>>T>>n; // for(int i=1;i<=n;i++) // { // cin>>h[i]>>t[i]>>k[i]; // } // //f(i,j,k)表示前i个物品体积不超过h,质量不超过t的最大热量; // for(int i=1;i<=n;i++) // { // for(int j=1;j<=H;j++) // { // //if(j>=h[i]) // for(int z=1;z<=T;z++) // { // f[i][j][z]=f[i-1][j][z]; // if(z>=t[i]&&j>=h[i]) // f[i][j][z]=max(f[i-1][j-h[i]][z-t[i]]+k[i],f[i][j][z]); // } // } // } // cout<<f[n][H][T]<<endl; // return 0; // } #include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N=50+10,M=5e2+10,mod=998244353,INF=0x3f3f3f3f; int h[N],t[N],k[N]; int f[M][M]; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int H,T,n;cin>>H>>T>>n; for(int i=1;i<=n;i++) { cin>>h[i]>>t[i]>>k[i]; } for(int i=1;i<=n;i++) for(int j=H;j>=h[i];j--) for(int z=T;z>=t[i];z--) { f[j][z]=max(f[j][z],f[j-h[i]][z-t[i]]+k[i]); } cout<<f[H][T]<<endl; return 0; }
10-07
1252