文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

解析

(我觉得)很难的dp
思路是真的没有想出来
关键在于dp的设计:

dp[l][r]:[l,r]的最小价值
f[l][r][a][b]:把l到r之间除了数值在[a,b]之间的数全部消掉需要的最小价值

(为了本题要对数列离散化一下,f里的ab存的是数的按大小的编号)
关键在于这个f的设计
之后后面就好办了,正常转移即可

事后诸葛:
为什么想到这么设计f呢?
因为这么能做出来
直观一点的想的话,我们想要转移,关键在于区间的最值
所以有此一想

代码

(在代码实现中,本人选择用f[l][r][0][0]存dp答案)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
typedef pair<ll, ll> pr;
const int N = 52;
const int mod = 1e9 + 7;
int n, m;
int A, B;
int w[N], q[N], rank[N];
ll dp[N][N], f[N][N][N][N];
int main() {memset(f, 0x3f, sizeof(f));scanf("%d%d%d", &n, &A, &B);for (int i = 1; i <= n; i++) scanf("%d", &w[i]), rank[i] = q[i] = w[i];sort(q + 1, q + 1 + n);int tot = unique(q + 1, q + 1 + n) - q - 1;for (int i = 1; i <= n; i++) rank[i] = lower_bound(q + 1, q + 1 + tot, rank[i]) - q;//   for(int i=1;i<=n;i++){//     f[i][i][0][0]=A;//     for(int a=1;a<=m;a++){//         for(int b=a;b<=m;b++){//             if(a==rank[i]&&b==rank[i]) f[i][i][a][b]=0;//              else f[i][i][a][b]=a;//            }//     }// }// printf("a=%d\n",a);for (int len = 1; len <= n; len++) {for (int l = 1; l + len - 1 <= n; l++) {int r = l + len - 1;f[l][r][0][0] = 2e9;for (int a = 1; a <= tot; a++) {for (int b = a; b <= tot; b++) {f[l][r][a][b] = 2e9;int tl = l, tr = r;while (w[tl] >= q[a] && w[tl] <= q[b]) tl++;while (w[tr] >= q[a] && w[tr] <= q[b]) tr--;if (tl > tr)f[l][r][a][b] = 0;else if (tl == tr)f[l][r][a][b] = A;  // printf("ok,f=%d\n",f[l][r][a][b]);else {f[l][r][a][b] = min(f[tl][tr][0][0], f[tl][tr][a][b]);for (int mid = tl; mid < tr; mid++) {f[l][r][a][b] =min(f[l][r][a][b], f[tl][mid][a][b] + f[mid + 1][tr][a][b]);}}// if(f[l][r][0][0]>f[l][r][a][b]+a+b*(q[b]-q[a])*(q[b]-q[a]))// printf("  a=%d b=%d tl=%d tr=%d f=%d// val=%d\n",q[a],q[b],tl,tr,f[l][r][a][b],f[l][r][a][b]+A+B*(q[b]-q[a])*(q[b]-q[a]));f[l][r][0][0] = min(f[l][r][0][0], f[l][r][a][b] + A + B * (q[b] - q[a]) * (q[b] - q[a]));}}// printf("l=%d r=%d dp=%d\n",l,r,f[l][r][0][0]);}}printf("%lld\n", f[1][n][0][0]);return 0;
}
/*
10
3 1
7 10 9 10 6 7 10 7 1 2
*/

最小代价(区间dp)(ybtoj)相关推荐

  1. icpc 2017北京 J题 Pangu and Stones 区间DP

    #1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...

  2. LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)

    文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调栈贪心 1. 题目 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点. 数组 arr 中的 ...

  3. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  4. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  5. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Descr ...

  6. Vijos1451圆环取数[环形DP|区间DP]

    背景 小K攒足了路费来到了教主所在的宫殿门前,但是当小K要进去的时候,却发现了要与教主守护者进行一个特殊的游戏,只有取到了最大值才能进去Orz教主-- 描述 守护者拿出被划分为n个格子的一个圆环,每个 ...

  7. CSP认证201612-4 压缩编码[C++题解]:区间dp、huffman树、石子合并

    题目分析 来源:acwing 分析: 本题难在想到是区间dp.想到区间dp之后,这就是石子合并的代码直接默写. 那么是如何建模的呢?我们把huffman编码(这里要求按照字典序大小编码,和huffma ...

  8. 不止代码:乘法游戏 题解(区间dp)

    题目描述 乘法游戏是在一行牌上进行的.每一张牌包括了一个正整数.在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌.最后一次移动后,这里只剩下两张牌. ...

  9. POJ-1651 Multiplication Puzzle 矩阵连乘问题(区间dp)

    题意 给我们n个数 让我们随意的跳出其中的数 每挑出一个数 计算代价为左边数* 当前数 * 右边的数 除了首尾两个数不选 中间的数可以任意挑 让我们求最小代价 CODE #include<bit ...

  10. LeetCode 1039. 多边形三角剖分的最低得分(区间DP)

    文章目录 1. 题目 2. 解题 1. 题目 给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], ..., A[N-1]. 假设您将多边形剖分为 N-2 个三角形 ...

最新文章

  1. 虚幻引擎5–环境设计学习教程
  2. Leetcode | Minimum/Maximum Depth of Binary Tree
  3. WINCE6.0+S3C6410睡眠和唤醒的实现
  4. 我的第一个Github项目上线了
  5. python3.4 pip必须升级python3.5_在ubuntu上将python3.4升级到python3.6会破坏pip
  6. 【Mockplus教程】界面闪烁花屏怎么办?
  7. Guice系列之用户指南(八)
  8. 十七条黄金定律!(心态是命运的控制塔)
  9. 拓端tecdat|R语言状态空间模型:卡尔曼滤波器KFAS建模时间序列
  10. 饿了么ui 省市区 三级联动框架
  11. 技术年货:美团技术沙龙合辑大放送
  12. C++二进制数转十进制
  13. 80后的青春里,总有散不去的周杰伦
  14. Stm32cubeIDE1.8 增加代码补齐
  15. 硕士管理类199联考论说文真题素材
  16. Algorithms and Data Structures I
  17. 有道难题- Unrepeating Nunbers
  18. python获取接口返回值_Python+request 登录接口reponse的返回值token跨py文件的传递《二》...
  19. IDEO用户体验创新模式01
  20. 考研政治题库,考研政治1000题之每日一题

热门文章

  1. linux重定向输出时加时间变量,shell 重定向错误输出到文件 加上时间(标明错误抛出的时间)...
  2. android activity解耦,Android与设计模式:用单一职责原则为Activity解耦
  3. 在linux中查找运行程序句柄,如何查找我的进程在Linux中打开的文件句柄?
  4. 女生学高铁和计算机哪个更好,2020铁路最好的5个专业 女生上铁路学什么专业好...
  5. cta策略 有哪些_CTA 主流的交易策略都有哪些?
  6. 2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程
  7. python监控键盘输入_Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】...
  8. php xlsx格式转换csv,我想使用C将.xls或.xlsx文件转换为.csv格式#
  9. 「offer来了」面试中必考的15个html知识点
  10. python原理及代码_原理+代码|详解层次聚类及Python实现