样例不对求助QAQ(玄关)
  • 板块P10978 Fence
  • 楼主__ycy1124__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/26 21:07
  • 上次更新2024/9/26 21:19:44
查看原帖
样例不对求助QAQ(玄关)
1287433
__ycy1124__楼主2024/9/26 21:07
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct Node{
	int l,p,s;
}a[101];
int dp[101][16001];
deque<int>q;
bool cmp(Node x1,Node x2){
	return x1.s<x2.s;
}
signed main(){
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=k;i++){
		scanf("%d%d%d",&a[i].l,&a[i].p,&a[i].s);
	}
	sort(a+1,a+k+1,cmp);
	for(int i=1;i<=k;i++){
		q.push_back(max(a[i].s-a[i].l,(long long)0));
		for(int j=1;j<=n;j++){
			dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
			if(j>a[i].s+a[i].l-1){	
//				printf("%lld ",dp[i][j]);
				continue;
			}
			while(!q.empty()&&a[q.front()].s+a[q.front()].l<j){
				q.pop_front();
			}
			if(j<a[i].s){
				while(!q.empty()&&dp[i-1][q.back()]-a[i].p*q.back()<=dp[i-1][j]-a[i].p*j){
					q.pop_back();
				}
				q.push_back(j);
//				printf("%lld ",dp[i][j]);
				continue;
			}
			if(!q.empty())
				dp[i][j]=max(dp[i][j],dp[i-1][q.front()]+a[i].p*j-a[i].p*q.front());
//			printf("%lld ",dp[i][j]);
		}
		while(!q.empty()){
			q.pop_back();
		}
//		printf("\n");
	}
	printf("%lld",dp[k][n]);
	return 0;
}
2024/9/26 21:07
加载中...