dp

https://www.luogu.org/problemnew/show/P2871
#include
#include
#include
#include
using namespace std;
int main()
{
int n,m;
int f[100000];
int w[100000];
int jia[100000];
int i,j;
cin >> m >> n;
memset(f,0,sizeof(f));
memset(w,0,sizeof(w));
memset(jia,0,sizeof(jia));
for(i=1;i<=m;i++)
{cin >> w[i] >> jia[i];}
for(i=1;i<=m;i++)
{
for(j=n;j>=w[i];j–)//倒叙,因为正序会导致每一次更新时可能会重用这次更新的数据
f[j]=max(f[j],f[j-w[i]]+jia[i]);
}
cout << f[n];
return 0;
}

dp来一发
01背包问题

你可能感兴趣的:(dp)