怎么说好呢
卡在101了
然后看104人多
开了发现是水的记录路径dp
但是写的太错了
WA,PE各种出
表示无语
今天多校的02也是
i,j的悲剧
一道题啊...
实在是...
实力不行...
感觉多校4/10过去了
实力没怎么提升的说
orz
吐槽完毕
水dp
鉴定完毕
dp[i][j]表示前i个花放到前j个花瓶中的最好结果
转移很好想
不过需要注意许多细节
比如什么i,j初值啊,输出啊,访问是否有效啊
估计是WA在这里了
毕竟可以有负值
memset的0并不小
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int dp[110][110];
int f,v,a[110][110];
int place[110][110];
void solve(){
int i,j,k;
cin>>f>>v;
for(i=1;i<=f;i++)for(j=1;j<=v;j++)cin>>a[i][j];
memset(dp,0,sizeof(place));
memset(place,0,sizeof(dp));
for(i=1;i<=f;i++){
for(j=i;j<=v;j++){
dp[i][j]=dp[i-1][j-1]+a[i][j];
place[i][j]=j;
if(j>i)
if(dp[i][j-1]>dp[i][j]){
dp[i][j]=dp[i][j-1];
place[i][j]=place[i][j-1];
}
}
}
cout<<dp[f][v]<<endl;
int res[110],tp=v;
for(i=f;i>=1;i--){
res[i]=place[i][tp];
tp=res[i]-1;
}
cout<<res[1];
for(i=2;i<=f;i++)cout<<" "<<res[i];
cout<<endl;
}
int main() {
#ifndef ONLINE_JUDGE
#endif
solve();
return 0;}