POJ - 3186 Treats for the Cows (区间DP)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ - 3186 Treats for the Cows (区间DP)相关的知识,希望对你有一定的参考价值。
题目链接: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)的主要内容,如果未能解决你的问题,请参考以下文章
POJ3186 Treats for the Cows —— 区间DP
POJ 3186 Treats for the Cows (简单区间DP)
POJ 3186Treats for the Cows (区间DP)
POJ 3186Treats for the Cows(区间DP)