议强数
查看原帖
议强数
892084
xinxin2022楼主2025/1/24 13:28
#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<int> v;
vector<int> w;
int dp[40005],maxn[40005];
int p,n,m,a,b,c,ans,f;
signed main(){
	cin>>n>>m;
	v.push_back(1e9);
	w.push_back(1e9);
	for(int i=1;i<=n;i++){
		cin>>a>>b>>c;
		while(c--){
		    v.push_back(a);
		    w.push_back(b);
		}
	}
	n=v.size()-1;
	for(int i=1;i<=n;i++){
	    if(f&&v[i]==v[i-1]&&w[i]==w[i-1]) continue;
	    f=1;
		for(int j=m;j>=w[i];j--){
		    if(dp[j-w[i]]+v[i]>dp[j]){
		        f=0;
		        dp[j]=dp[j-w[i]]+v[i];
		    }
		}
	}
	for(int i=1;i<=m;i++) ans=max(ans,dp[i]);
	cout<<ans;
	return 0;
}

O(玄学)O(玄学) 时间复杂度的代码过了。

理论上可以造出一组每个物品都能更新答案的数据,能把此代码卡退化到 O(Wmi)O(W \sum m_i)

2025/1/24 13:28
加载中...