一维背包问题:采药
这是一个典型的背包问题,动态规划分分钟解决
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,t[10001],f[10001],w[10001],ans;
int main(){
cin>>n>>m;
for(i=1;i<=m;i++)
cin>>t[i]>>w[i];
for(i=1;i<=m;i++)
for(j=n;j>=t[i];j--)
if(f[j-t[i]]+w[i]>f[j])
f[j]=f[j-t[i]]+w[i];
cout<<f[n];
return 0;
}
二维背包问题:榨取kkk
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,w2[10001],f[501][501],w1[10001],ans,k,o;
int main(){
cin>>m>>n>>k;
for(i=1;i<=m;i++)
cin>>w1[i]>>w2[i];
for(i=1;i<=m;i++)
for(j=n;j>=w1[i];j--)
for(o=k;o>=w2[i];o--)
if(f[j-w1[i]][o-w2[i]]+1>f[j][o])
f[j][o]=f[j-w1[i]][o-w2[i]]+1;
cout<<f[n][k];
return 0;
}