POJ3186(区间DP)

原创 2018年04月16日 20:34:40

题目链接

题意:有一个双向队列,可以从中取数,取出的第k个数乘以k就是这个数的价值,然后求所有数的最大价值。

题解:
容易得到dp[i][j]=max(dp[i+1][j]+v[i](nj+i),dp[i][j1]+v[j](nj+i))
然后求解当前左边界i的时候需要参考i+1的时候,右边界j需要参考j-1,所以i逆序便利,j顺序遍历。
(表示写了好久的dfs。。。。)

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,num[2005],ans;
int dp[2001][2001];
int main()
{
    while(~scanf("%d",&n))
    {
        memset(num,0,sizeof num);
        memset(dp,0,sizeof dp);
        for (int i = 1; i <= n; i++)
        {
            scanf("%d",&num[i]);
            dp[i][i] = num[i];
        }
        ans = 0;
        for (int i = n - 1; i >= 1; i--)
        {
            for (int j = i; j <= n; j++)
            {
                dp[i][j] = max(dp[i + 1][j] + num[i]*(n - j + i),dp[i][j - 1] + num[j]*(n - j + i));
            }
        }
        printf("%d\n",dp[1][n]);
    }
}
版权声明:很高兴能帮到你,QAQ,转载记得注明出处哦。o(* ̄︶ ̄*)o https://blog.csdn.net/meituanwaimai/article/details/79966061

poj3186(区间dp)

题意:给一行n个数,每次可以取出行首或者行末的数,如果第ai是第i次取出的,可以得到ai*i的收益,求最大的总收益; 我们设dp[i][j],表示从i到j的最大收益。最后输出dp[1][n]...
  • Little_boy_z
  • Little_boy_z
  • 2017-10-28 11:20:40
  • 51

POJ3186【区间DP】

题意: 每次只能取两端,然后第 i 次取要val[ i ]*i,求一个最大值 先将错觉吧 这道题目一开始想的就是记忆化搜索,然后太天真了?好像是,一开始用一维dp[ i ]直接代表一个点的最大。...
  • KEYboarderQQ
  • KEYboarderQQ
  • 2016-07-11 10:24:45
  • 211

poj3186——Treats for the Cows(区间dp)

DescriptionFJ has purchased N (1
  • blue_skyrim
  • blue_skyrim
  • 2016-11-21 21:25:57
  • 565

POJ3186:Treats for the Cows 区间DP

题目链接:http://poj.org/problem?id=3186 一:题意: 给定一个序列,序列中有N个元素,我们每次都可以从序列最前面或者最后面取出一个数, 假设按照上面的方法取完所有原...
  • yu_zhi_bo_zhi_shui
  • yu_zhi_bo_zhi_shui
  • 2015-08-12 16:15:10
  • 248

POJ3186:Treats for the Cows(区间DP)

题目链接: 题目大意;给出的一系列的数字,可以看成一个双向队列,每次只能从队首或者队尾出队,第n个出队就拿这个数乘以n,最后将和加起来,求最大和 思路:区间dp,从小的区间推大的区间,即从最后一个...
  • qq_36782366
  • qq_36782366
  • 2017-07-25 21:57:30
  • 96

poj3186(递推)

链接:点击打开链接 题意:给定一串数列,每次只可以从两端取数,第一次取得乘1,第二次乘2,以此类推问当所有数取完时和最大是多少 代码: #include #include #include #i...
  • stay_accept
  • stay_accept
  • 2016-05-27 17:28:16
  • 287

POJ 3186 动态规划

题目链接:http://poj.org/problem?id=3186 题意:给定n个数 每次可以从头或者尾取出数据 于是按取出来得顺序,就可以排成一个数列,假设这个数列为 a1,a2,a3,...
  • xieshimao
  • xieshimao
  • 2011-03-31 14:11:00
  • 2110

区间DP总结

做了几题区间动态规划的题目,觉得区间动态规划的题目是有点难的。 一点一点说吧! 首先我觉得首先区间DP的应用要先想到回文串的,包括一个字符串的最长的非连续的回文串,一个字符串非连续的回文串的数目。...
  • Dacc123
  • Dacc123
  • 2016-04-07 11:33:51
  • 2700

poj3186解题报告

题目大意:给定n个数 每次可以从头或者尾取出数据 于是按取出来得顺序,就可以排成一个数列,假设这个数列为 a1,a2,a3,a4.......an 现在我们假设按照取出来的顺序有一个权值 w=a1*1...
  • h123120
  • h123120
  • 2015-07-11 17:08:13
  • 730

区间DP小结(附经典例题)

区间DP小结(附经典例题:石子合并、括号匹配、整数划分、凸多边形三角划分etc) 区间DP之石子合并问题(平行四边形优化) 区间DP之括号匹配问题 区间DP之整数划分问题 区间DP之凸多边形三...
  • my_sunshine26
  • my_sunshine26
  • 2017-08-13 12:50:24
  • 560
收藏助手
不良信息举报
您举报文章:POJ3186(区间DP)
举报原因:
原因补充:

(最多只允许输入30个字)