听取WA声一片!求助庆功会

下方是代码:

#include<bits/stdc++.h>
using namespace std;
const int N=5005;
int n,m,v[N],w[N],s[N],f[N];
bool g[N][N];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i]>>w[i]>>s[i];
        for(int j=m;j>=v[i];j--)
        {
            for(int k=0;k<=s[i];k++)
            {
                if(j>=k*v[i])
                {
                    int t=f[j-k*v[i]]+k*w[i];
                    if(t>f[j])
                    {
                        f[j]=t;
                        g[i][j]=1;
                    }
                }
            }
        }
    }
    cout<<f[m]<<endl;
    while(n)
    {
        if(g[n][m])
        {
            cout<<n<<" ";
            m-=v[n]*s[n];
        }
        n--;
    }
    return 0;
}
        for(int j = m; j >= 0; --j){
            for(int k = 0; k <= s &&k * v <= j; ++k){
                dp[j] = max(dp[j],dp[j - k] + k * w);
            }
        }

关键代码(dp)

你用dp试试?

本蒟蒻刚学
用dp

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m;
	int w[514],v[514],s[514];
	int dp[6001]={0};
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i]>>s[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=w[i];j--){
			for(int k=1;k<=s[i];k++){
				if(j<k*w[i]) break;
				dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);
			}
		}
	}
	cout<<dp[m];
	return 0;
}

e这好像是输出2行

你这个好像不太对吧…
输出好像是两行

样例测得也不对,应是1000,但运行是1040,怎么弄啊

差不多就对了

评测机要是能差不多就好了

你是不是对细节有什么误解


你过了??

我们的题好像不太一样

题目可能有亿点点不一样?

是庆功会啊…

差不多

《庆功宴》《庆功会》

你那是庆功宴
我都不知道这什么题目,我都没有这题

输入一样