hdu 1506 动态规划

来源:互联网 发布:c语言主函数是什么 编辑:程序博客网 时间:2024/06/09 12:45

<p>//最近在做dp题,做了几道背包题,看到这题一开始没有什么思路,因为暴力的方法一定会超时。</p><p>//看完大牛的代码就理解了。</p><p>//先从左到右扫一遍,往左延伸,l[]数组记录长度;再从右往左,往右延伸,r[]数组记录长度。总长度就是l[i]+r[i]-1;</p>
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define ll __int64ll dp[100010],l[100010],r[100010];ll n;int main(){while(~scanf("%I64d",&n)&&n){int i;for(i=1;i<=n;i++){scanf("%I64d",&dp[i]);l[i]=r[i]=1;}ll t;for(i=2;i<=n;i++){t=i-1;while(dp[t]>=dp[i]&&t>=1){l[i]+=l[t];t=t-l[t];}}for(i=n-1;i>=1;i--){t=i+1;while(dp[t]>=dp[i]&&t<=n){r[i]+=r[t];t=t+r[t];}}ll ans=0;for(i=1;i<=n;i++){t=dp[i]*(l[i]+r[i]-1);if(ans<t) ans=t;}printf("%I64d\n",ans);}return 0;}


0 0
原创粉丝点击