讨论 / 为什么有两个测试点没过;求解。
liaoyu 2017-01-31 00:15:58
点我顶贴 收藏 删除
#include<iostream>

#include<cstdio>

using namespace std;

int m[2000],w[2000],s[2000];

int f[2000]={0};

int x,y;

int main()

{ int n,v;

cin>>n>>v;

for(int i=1;i<=n;i++) cin>>m[i]>>w[i]>>s[i];

for(int i=1;i<=n;i++)

for(int j=v;j>=w[i];j--)

{

m[i]=min(m[i],j/w[i]);

for(int k=0;k<=m[i];k++)

{

x=w[i]*k; y=s[i]*k;

if(j<x) break;

else if(f[j]<f[j-x]+y)

f[j]=f[j-x]+y;

}}

cout<<f[v];

return 0;

}

查看更多回复
提交回复