1 条题解
-
1
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int n,sum[100010],q[100010],h[100010];//n 疲劳前缀和 前i个最大值 后i个最大值 struct node{ int s;//距离 int a;//疲劳 }v[100010]; bool cmp(node x,node y) { return x.a>y.a; //按照疲劳值排序 // x=1 1000 // x=2 1000+999 //x=3 1000+999+998 //x=4 1000+999+998+997+4*2 前N项的和 // 1 2 3 4 // 2*d+sum[i] sum[i]-min(a)+ 2*d2+v[j] } int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&v[i].s); for(int i=1;i<=n;i++)scanf("%d",&v[i].a); sort(v+1,v+1+n,cmp);//按疲劳排序 for(int i=1;i<=n;i++) sum[i]=sum[i-1]+v[i].a; for(int i=1;i<=n;i++) q[i]=max(q[i-1],2*v[i].s);//前i个最大值 for(int i=n;i>=1;i--) h[i]=max(h[i+1],2*v[i].s+v[i].a);//后i个最大值 for(int i=1;i<=n;i++) printf("%d\n",max(sum[i]+q[i],sum[i-1]+h[i])); return 0; }
- 1
信息
- ID
- 536
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 49
- 已通过
- 15
- 上传者