dp背包问题(2)
1. 二维费用的背包问题
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1001; ll f[110][110]; ll n,V,M; ll v[N],m[N],w[N]; int main(){ cin>>n>>V>>M; for(int i=1;i<=n;i++){ cin>>v[i]>>m[i]>>w[i]; } for(int i=1;i<=n;i++){ for(int vs=V;vs>=v[i];vs--){ for(int ws=M;ws>=m[i];ws--){ f[vs][ws]=max(f[vs][ws],f[vs-v[i]][ws-m[i]]+w[i]); } } } cout<<f[V][M]; return 0; }
2.完全背包问题
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1010; ll v[N],w[N]; ll n,V; ll f[N]; int main(){ cin>>n>>V; for(int i=1;i<=n;i++){ cin>>v[i]>>w[i]; } for(int i=1;i<=n;i++){ for(int vs=v[i];vs<=V;vs++){ f[vs]=max(f[vs],f[vs-v[i]]+w[i]); } } cout<<f[V]; return 0; }