记录编号 304301 评测结果 AAAAAAAAAA
题目名称 [IOI 1994] 数塔 最终得分 100
用户昵称 Gravatar5458 是否通过 通过
代码语言 C++ 运行时间 0.012 s
提交时间 2016-09-07 23:10:00 内存使用 0.35 MiB
显示代码纯文本
#include <cstdio>
const int maxn=80+5;
int max(int x,int y){
	if(x>y) return x;
	return y;
}
int a[maxn][maxn],d[maxn][maxn],n,k,m=2;
int now[maxn];
int main(){
	freopen("shuta.in","r",stdin);
	freopen("shuta.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++){
			scanf("%d",&k);
			a[i][j]=k;
		}
	for(int j=1;j<=n;j++)
		d[n][j]=a[n][j];
	for(int i=n-1;i>=1;i--)
		for(int j=1;j<=n;j++)
			d[i][j]=a[i][j]+max(d[i+1][j],d[i+1][j+1]);
	printf("%d\n",d[1][1]);
	int j=1; now[1]=1;
	for(int i=1;i<=n-1;i++){
		if(d[i+1][j+1]>d[i+1][j]) j++;
		now[m++]=j;
	}//用于保存需要的j值(i是逐层+1所以不用记录)
	for(int i=1;i<=n;i++)
		printf("%d ",a[i][now[i]]);
	return 0;
}