社区讨论
蒟蒻样例不过,调了许久,求助
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 条回复,欢迎继续交流。
正在加载回复...