记录编号 |
86358 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[IOI 1999] 花店橱窗 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
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;
}