/*
题意:n个城市排成一行,每个城市中有vi个金币。两个人同时从同一个个城市出发,单位时间能走到相邻城市。
到达城市获取金币不耗时间,且任意时刻两人距离不可以超过m,问t个时间他们最多能获得多少金币。
如果 m >= t * 2,两个人两个方向一直走
否则 两人一直向两边走指导相距m,注意,若m为奇数,则某人要停走一天。
然后维持距离同时向左向右枚举剩余天数
*/
#include <stdio.h>
#include <algorithm>
using namespace std;
#define N 110000
typedef long long Long;
Long v[N],sum[N];
int t,m;
int n,p;
Long f(int l,int r,int day)
{
int i,j,k;
Long ans = sum[r] - sum[l-1];
for(k = 0;k <= day;++k)
{
i = l - k;
if(i < 1) i = 1;
j = r + day - k * 2;
if(j > n) j = n;
ans = max(ans,sum[max(j,r)] - sum[min(i,l)-1]);
if(i == 1)
break;
}
for(k = 0; k <= day; ++k)
{
j = r + k;
if( j > n) j = n;
i = l - day + k * 2;
if( i < 1) i = 1;
ans &
zoj 3627#模拟#枚举
最新推荐文章于 2020-05-04 21:30:59 发布