您的位置:首页 > 其它

codeforces Technocup 2017 - Elimination Round 2/Codeforces Round #380 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 2) 题解

2016-11-22 21:39 507 查看
久违的下午场,打了一场状态不错一下rank12涨了207~~~

A. Interview with Oleg

题意:

给你一个长度不超过100的串,把其中ago开头后面不接或者接gogogo。。。的部分全部变成***

思路:

水水,扫

/* ***********************************************
Author        :devil
************************************************ */
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <string>
#include <time.h>
#include <cmath>
#include <stdlib.h>
#define LL long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define ou(a) printf("%d\n",a)
#define pb push_back
#define pii pair<int,int>
#define mkp make_pair
template<class T>inline void rd(T &x)
{
char c=getchar();
x=0;
while(!isdigit(c))c=getchar();
while(isdigit(c))
{
x=x*10+c-'0';
c=getchar();
}
}
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);
using namespace std;
const int inf=0x3f3f3f3f;
const int mod=1e9;
const int N=4e3+10;
const int M=100;
int n,dp
[M][M][2],a
;
int dfs(int l,int r,int k,int who)
{
int &ret=dp[l][r-l][k][who];
if(ret!=inf) return ret;
if(!who)
{
if(l+k-1<=r)
{
ret=dfs(l+k,r,k,who^1)+a[l+k-1]-a[l-1];
if(l+k<=r) ret=max(ret,dfs(l+k+1,r,k+1,who^1)+a[l+k]-a[l-1]);
}
else ret=0;
}
else
{
if(l+k-1<=r)
{
ret=dfs(l,r-k,k,who^1)-a[r]+a[r-k];
if(l+k<=r) ret=min(ret,dfs(l,r-k-1,k+1,who^1)-a[r]+a[r-k-1]);
}
else ret=0;
}
return ret;
}
int main()
{
memset(dp,inf,sizeof(dp));
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d",&a[i]),a[i]+=a[i-1];
printf("%d\n",dfs(1,n,1,0));
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐