记录编号 86358 评测结果 AAAAAAAAAA
题目名称 [IOI 1999] 花店橱窗 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.016 s
提交时间 2014-01-25 11:49:32 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iomanip>
#include<deque>
using namespace std;
int main(){
	freopen("hana.in","r",stdin);
	freopen("hana.out","w",stdout);
	const int SIZEF=101,INF=0x7ffffff;
	int F,V;//F个花,V个瓶
	int value[SIZEF][SIZEF]={0};
	scanf("%d%d",&F,&V);
	for(int i=1;i<=F;i++){
		for(int j=1;j<=V;j++) scanf("%d",&value[i][j]);
	}
	int f[SIZEF][SIZEF]={0};//摆了前i个花,第i个花在j瓶中
	int father[SIZEF][SIZEF]={0};
	for(int i=0;i<=F;i++){
		for(int j=0;j<=V;j++) f[i][j]=-INF;
	}
	f[0][0]=0;
	for(int i=1;i<=V;i++) f[1][i]=value[1][i];
	for(int i=2;i<=F;i++){
		for(int j=1;j<=V;j++){
			for(int k=1;k<j;k++){
				if(f[i-1][k]+value[i][j]>f[i][j]){
					f[i][j]=f[i-1][k]+value[i][j];
					//cout<<k<<endl;
					father[i][j]=k;
				}
			}
		}
	}
	int ans=0,dec;
	for(int i=1;i<=V;i++){
		if(f[F][i]>ans){
			ans=f[F][i];
			dec=i;
		}
	}
	deque<int> dls;
	for(int i=F;i>=1;i--){
		dls.push_front(dec);
		dec=father[i][dec];
	}
	cout<<ans<<endl;
	for(int i=0;i<F;i++) cout<<dls[i]<<" ";cout<<endl;
	return 0;
}