求调
查看原帖
求调
1082999
jfls211320zhr楼主2024/11/7 17:08

rt,3636 分解法,每个点除了第一组数据以外全部 WA

#include<bits/stdc++.h>
using namespace std;
long long c,t,n,m,k,d,tmp,tps,ans;
long long lim[1106],dp[1106][1106];//第i天连续泡了j天时的最大体力值 
struct node{
	long long x,y,v;
}a[114514];
bool cmp(node u,node v){
	if(u.x!=v.x)return u.x<v.x;
	else return u.y<v.y;
}
int main(){
	freopen("run2.in","r",stdin);
	scanf("%lld %lld",&c,&t);
	while(t--){
		ans=0xC0C0C0C0C0C0C0C0;
		tmp=1;
		tps=0; 
		memset(dp,192,sizeof(dp));
		scanf("%lld %lld %lld %lld",&n,&m,&k,&d);
		for(long long i=1;i<=m;i++)scanf("%lld %lld %lld",&a[i].x,&a[i].y,&a[i].v);
		sort(a+1,a+m+1,cmp);
		dp[0][0]=0;
		for(long long i=1;i<=n;i++){
			dp[i][0]=dp[i-1][0]; 
			lim[i]=min(k,i);
			tps=0;
			for(long long ii=1;ii<=lim[i];ii++){
				dp[i][ii]=max(dp[i][ii],dp[i-1][ii-1]-d);
				if(ii<=lim[i-1])dp[i][0]=max(dp[i][0],dp[i-1][ii]);
				if(a[tmp].x==i)if(a[tmp].y==ii){
					tps+=a[tmp].v;
					tmp++;
				}
				dp[i][ii]+=tps;
			}
		}
		for(long long i=0;i<=k;i++)ans=max(ans,dp[n][i]);
		printf("%lld\n",ans);
	}
	return 0;
}
2024/11/7 17:08
加载中...