社区讨论

蒟蒻样例不过,调了许久,求助

CF311BCats Transport参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo30l8re
此快照首次捕获于
2023/10/23 22:50
2 年前
此快照最后确认于
2023/10/23 22:50
2 年前
查看原帖

拜谢大神!!

CPP
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<cmath>
#define loop(i,x,y) for(int i=x;i<=y;i++)
#define doop(i,x,y) for(int i=x;i>=y;i--)
#define Max(x,y) x>y?x:y
#define Min(x,y) x<y?x:y
#define int long long 
#define X(x) x
#define Y(x) f[i-1][x]-s[x]
#define slope(x,y) 1.0*(Y(x)-Y(y))/(X(x)-X(y))
using namespace std;
int read(){int x=0,y=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') y=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch^48);	ch=getchar();}return x*y;}
void print(int x){if(x<0){putchar('-');x=-x;}if(x>=10){print(x/10);}putchar(x%10+'0');return;}
typedef long long ll;
const int Mod=998244353;
const long long INF = 0x3f3f3f3f;
const long long N=1e4+1;
const long long M=1e5+5;

int n=read(),m=read(),p=read();
int d[N],t[N];
int sd[N];
int f[105][100005];
int s[N];
int g[N];
int q[N];
signed main(){
//	cout<<1145;
	loop(i,2,n)
		d[i]=d[i-1]+read();
	loop(i,1,m){
		int x=read(),y=read();
		t[i]=y-d[x];
	}
	sort(t+1,t+m+1);
	loop(i,1,m){
		s[i]=s[i-1]+t[i];
	}
	loop(i,1,m) f[0][i]=0x7f7f7f7f7f7f7f7f;
	
	for(int i=1;i<=p;i++){
		int l=1,r=0;
		
		loop(j,1,m) g[i]=f[i-1][j]-s[j];
		for(int j=1;j<=m;j++){
			while(l<r&&slope(q[l],q[l+1])<=t[j]) l++;
			int k=q[l];
			f[i][j]=min(f[i-1][j],g[k]+(j-k)*t[j]-s[j]);
			while(l<r&&slope(q[r-1],q[r])>=slope(q[r],j)) r--;
			q[++r]=i;
			
		}
	}
	cout<<f[p][m];
	
	
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...