现在有一个背包容量为W的背包,有n件物品,分别的重量为ci,价值为vi,需要恰好将背包装满,且价值最大,问最大价值是多少
输入
第一行:n W
接下来n行,每行两个数:ci vi
输出
如果有装满方案,则输出最大价值,如果没有,则输出no answer
样例
样例输入1
5 10
5 4
1 8
2 1
3 1
3 2
样例输出1
7
提示
数据范围:
0<=n,w<=10000
代码
#include<bits/stdc++.h>
using namespace std;
int m,n,f[10001],w[10001],c[10001];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>c[i];
}
for(int i=1;i<=10000;i++)
{
f[i]=INT_MIN;
}
for(int i=1;i<=n;i++)
{
for(int v=m;v>=w[i];v--)
{
f[v]=max(f[v],f[v-w[i]]+c[i]);
}
}
if(f[m]>=0)
{
cout<<f[m];
}
else
{
cout<<"no answer";
}
return 0;
}