game1.cpp

来自「dd牛的usaco源代码!对学习算法」· C++ 代码 · 共 52 行

CPP
52
字号
/*
ID: dd.ener1
PROG: game1
LANG: C++
*/
#include <cstdio>
#include <cstring>
using namespace std;

const long maxn=110;
long N;
long s[maxn];
long sum[maxn];
long best[maxn][maxn];//best[i][j]=sum[i..j]-min(best[i-1][j],best[i,j-1]);

void input(){
	freopen("game1.in","r",stdin);
	scanf("%d",&N);
	for(long i=0;i<N;++i)
		scanf("%d",s+i);
}
void solvesum(){
	sum[0]=0;
	for(long i=1;i<=N;++i)
		sum[i]=sum[i-1]+s[i-1];
}
inline long min(const long a,const long b){
	return a<b?a:b;
}
void solve(){
	for(long i=0;i<N;++i)
		best[i][i]=s[i];
	for(long d=1;d<N;++d){
		for(long i=0;;++i){
			long j=i+d;
			if(j>=N)break;
			best[i][j]=sum[j+1]-sum[i]-min(best[i+1][j],best[i][j-1]);
		}
	}
}
void output(){
	freopen("game1.out","w",stdout);
	printf("%d %d\n",best[0][N-1],sum[N]-best[0][N-1]);
}
int main(){
	input();
	solvesum();
	solve();
	output();
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?