HOW F?
  • 板块学术版
  • 楼主A_small_WA
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/12/7 21:44
  • 上次更新2024/12/8 09:25:01
查看原帖
HOW F?
1124323
A_small_WA楼主2024/12/7 21:44

自己推的01背包 DP,但只 AC 了 1010 组,其他都是 WA,求大佬帮忙看看。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=500200;
long long dp[N],p[N],u[N],c[N];
map <int,int> mp[N];
signed main(){
	long long n,x,k,ans=0;
	cin>>n>>x>>k;
	for(int i=1;i<=n;i++){
		cin>>p[i]>>u[i]>>c[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=x;j>=p[i];j--){
			int kh=0;
			if(mp[j-p[i]][c[i]]==0) kh=1;
			mp[j-p[i]][c[i]]++;
			if(dp[j]<dp[j-p[i]]+u[i]+kh*k) 
				dp[j]=dp[j-p[i]]+u[i]+kh*k;
			else{
				mp[j-p[i]][c[i]]--;
				if(mp[j-p[i]][c[i]]==0) 
					mp[j-p[i]].erase(c[i]);
			}
		}
	}
	for(int i=0;i<=x;i++){
		ans=max(ans,dp[i]);
	}
	cout<<ans;
    return 0;
}
2024/12/7 21:44
加载中...