http://acm.hdu.edu.cn/showproblem.php?pid=4283

题意:有n个数字,不操作的情况下从左到右按顺序输出,但是可以先让前面的数字进栈,让后面的数字输出,然后栈里的数字再输出。执行完各种操作后,第i个数字输出的代价是w[i] * (i-1)。问如何弄才能使得代价最小,输出。

思路:做了半个下午。好菜啊QAQ。

考虑两种情况:

1、左区间的元素先输出,然后右区间的元素再输出。这个时候方程为 dp[i][j] = dp[i][k] + dp[k+1][j] + sum(k+1,j) * (i-k+1)。

2、左区间的元素进栈,右区间的元素先输出,然后左区间元素倒序输出(因为进了栈顺序反了)。方程为 dp[i][j] = dp[k+1][j] + sum(i,k) * (j-k) + tmp.(tmp是倒序输出的代价)

然后对于这两种情况取优就好了。

都是细节没搞清楚才做好久。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 #define N 105
 6 typedef long long LL;
 7 LL dp[N][N], w[N], pre[N];
 8
 9 int main() {
10     int t, cas = 0;
11     scanf("%d", &t);
12     while(t--) {
13 //        char s[2];
14 //        if(cas == 0) scanf("%s", s);
15         int n; scanf("%d", &n);
16         memset(dp, 0x3f3f3f3f, sizeof(dp));
17         for(int i = 1; i <= n; i++) scanf("%lld", &w[i]), dp[i][i] = 0;
18         for(int i = 1; i <= n; i++) pre[i] = pre[i-1] + w[i];
19         for(int len = 1; len < n; len++) {
20             for(int i = 1; i + len <= n; i++) {
21                 int j = i + len;
22                 for(int k = i; k < j; k++) {
23                     // a的情况是前后的区间都不入栈
24                     LL a = dp[i][k] + dp[k+1][j] + (pre[j] - pre[k]) * (k + 1 - i);
25                     LL tmp = 0;
26                     for(int cnt = k; cnt >= i; cnt--) tmp += w[cnt] * (k - i);
27                     // tmp 求倒着出栈的代价
28                     // b的情况是前面的入栈,让后面的区间直接出来
29                     LL b = dp[k+1][j] + (pre[k] - pre[i-1]) * (j - k) + tmp;
30                     dp[i][j] = min(dp[i][j], min(a, b));
31                 }
32             }
33         }
34         printf("Case #%d: %lld\n", ++cas, dp[1][n]);
35     }
36     return 0;
37 }

转载于:https://www.cnblogs.com/fightfordream/p/6475714.html

HDU 4283:You Are the One(区间DP)相关推荐

  1. HDU 5693:D Game(区间DP)

    D Game Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub ...

  2. hdu 4632 子字符串统计的区间dp

    题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...

  3. HDU 5115 (杀狼,区间DP)

    题意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时, ...

  4. HDU 5115 M - Dire Wolf 【区间dp】

    传送门 Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if ...

  5. HDU 5968 异或密码(区间dp)

    Problem Description 晨晨在纸上写了一个长度为N的非负整数序列{ai}.对于这个序列的一个连续子序列{al,al+1,-,ar}晨晨可以求出其中所有数异或的结果 alxoral+1x ...

  6. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  7. HDU 5693 D Game 区间dp

    D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...

  8. HDU 2476 String painter (区间DP)

    题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...

  9. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

  10. hdu 5151 Sit sit sit(区间dp+排列组合)

    题目链接:hdu 5151 Sit sit sit 题意: 一共有并排N个椅子, N个学生依次去坐,同时满足3个条件就不能坐下去: 1,该椅子不在最左,不在最右. 2,该椅子左右都有人坐了. 3,左右 ...

最新文章

  1. 12.PDE与PTE
  2. 两个形状不同的长方形周长_“解决问题——怎样围周长最短”教学思考与设计...
  3. java 流 复制文件_【Java】使用字节流复制文件
  4. enterpriseTECH Dec 11
  5. oracle 安装 挂载磁盘组_ora-15077,ASM磁盘组不能挂载
  6. CodeForces - 1263A Sweet Problem(思维,水题)
  7. 转:centos8开启防火墙端口
  8. html文字竖直书写,css 文字竖直居中的写法和图片垂直居中代码(图文)
  9. Leader-Follower线程模型
  10. 修改log4j的日志文件的日志级别
  11. 胡波外挂做模具3D装配的方法
  12. 鹏业云计价i20清单与定额录入
  13. win10系统没有信息服务器地址,Win10没有有效的ip配置
  14. 物联网开发 7 旗点云物联网云平台
  15. ora2pg参数fkey_deferrable引出创建索引NOT VALID方式
  16. Linux 远程工具
  17. SpringMVC----ajax跨域请求
  18. 利用C语言实现二叉搜索树的遍历、查找、插入、删除
  19. Codeforces 616A
  20. 积极应对APP风险问题,海云安力保移动应用安全

热门文章

  1. 计算 1!+2!+3!+……+10!
  2. Linux中文显示乱码?如何设置centos显示中文
  3. heartbeat自带的断网切换功能-ipfail
  4. bank holiday in uk 2020
  5. how to find your partner
  6. english writing sample for professional
  7. UNITY C#内存泄漏
  8. break prefab instance的原理
  9. Zabbix SQL注入漏洞威胁预警通告
  10. 如何突破你的“内在阻力”,让你渴望多年的梦想都能达成,并创造超越想像极限的“全方位成功”?突破内在阻力全方位成功...