Sgu 104

来源:互联网 发布:淘宝如何做虚拟充值 编辑:程序博客网 时间:2024/04/29 19:32

怎么说好呢

卡在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#endifsolve();return 0;}