码迷,mamicode.com
首页 > 其他好文 > 详细

POJ - 3186 Treats for the Cows (区间DP)

时间:2017-09-04 22:48:51      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:根据   bsp   序列   cout   log   cow   problem   code   val   

题目链接:http://poj.org/problem?id=3186

题意:给定一组序列,取n次,每次可以取序列最前面的数或最后面的数,第n次出来就乘n,然后求和的最大值。

 题解:用dp[i][j]表示i~j区间和的最大值,然后根据这个状态可以从删前和删后转移过来,推出状态转移方程:

dp[i][j]=max(dp[i+1][j]+value[i]*k,dp[i][j-1]+value[j]*k)

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 const int N=2222;
 6 int dp[N][N],value[N];
 7 
 8 int main(){
 9     int n;
10     cin>>n;
11     for(int i=1;i<=n;i++) cin>>value[i];
12     for(int i=n;i>=1;i--){ 
13         for(int j=i;j<=n;j++){
14             dp[i][j]=max(dp[i+1][j]+value[i]*(n+i-j),dp[i][j-1]+value[j]*(n+i-j));
15         }
16     }
17     cout<<dp[1][n]<<endl;
18     return 0;
19 }

 

POJ - 3186 Treats for the Cows (区间DP)

标签:根据   bsp   序列   cout   log   cow   problem   code   val   

原文地址:http://www.cnblogs.com/Leonard-/p/7475884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!