自己推的01背包 DP,但只 AC 了 10 组,其他都是 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;
}