区间dp,可以以一个区间为状态,f[i][j]是第i个切点到第j个切点的木棍的最小费用

那么对于当前这一个区间,枚举切点k,

可以得出f[i][j] = min{dp(i, k) + dp(k, j) | i < k < j} + a[j] - a[i](这一段的长度,也就是这一刀的费用)

然后记住要人为的加入两个切点头和尾

然后因为长区间依赖于短区间,所以要从短区间渐渐推到长区间。

如果是记忆化搜索,那么就是左端点和右端点不断减少,递归,满足。

如果是递推,那么注意区间长度要不断变长,具体看代码

记忆化搜索

#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 55;
int n, L, a[MAXN], f[MAXN][MAXN], vis[MAXN][MAXN]; int dp(int i, int j)
{
if(i + 1 == j) return 0;
if(vis[i][j]) return f[i][j];
vis[i][j] = 1; int& ans = f[i][j];
ans = 1e9;
REP(k, i + 1, j)
ans = min(ans, dp(i, k) + dp(k, j) + a[j] - a[i]);
return ans;
} int main()
{
while(~scanf("%d%d", &L, &n) && L)
{
REP(i, 1, n + 1) scanf("%d", &a[i]);
a[0] = 0; a[n + 1] = L;
memset(vis, 0, sizeof(vis));
printf("The minimum cutting is %d.\n", dp(0, n + 1));
}
return 0;
}

递推

#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 55;
int n, L, a[MAXN], f[MAXN][MAXN], vis[MAXN][MAXN]; int main()
{
while(~scanf("%d%d", &L, &n) && L)
{
REP(i, 1, n + 1) scanf("%d", &a[i]);
a[0] = 0; a[n + 1] = L;
for(int i = n + 1; i >= 0; i--)
for(int j = i + 1; j <= n + 1; j++)
{
if(i + 1 == j) { f[i][j] = 0; continue; }
f[i][j] = 1e9;
REP(k, i + 1, j)
f[i][j] = min(f[i][j], f[i][k] + f[k][j]+ a[j] - a[i]);
}
printf("The minimum cutting is %d.\n", f[0][n + 1]);
}
return 0;
}

紫书 例题 9-9 UVa 10003 (区间dp+递推顺序)的更多相关文章

  1. UVA 10003 区间DP

    这个题目蛮有新意的,一度导致我没看透他是区间DP 给一个0-L长度的木板,然后给N个数,表示0-L之间的某个刻度,最后要用刀把每个刻度都切一下 使其断开,然后每次分裂的cost是分裂前的木板的长度.求 ...

  2. UVA 10559 Blocks(区间DP&&递推)

    题目大意:给你玩一个一维版的消灭星星,得分是当前消去的区间的长度的平方,求最大得分. 现在分析一下题目 因为得分是长度的平方,不能直接累加,所以在计算得分时需要考虑前一个状态所消去的长度,仅用dp[l ...

  3. 紫书 例题 11-13 UVa 10735(混合图的欧拉回路)(最大流)

    这道题写了两个多小时-- 首先讲一下怎么建模 我们的目的是让所有点的出度等于入度 那么我们可以把点分为两部分, 一部分出度大于入度, 一部分入度大于出度 那么显然, 按照书里的思路,将边方向后,就相当 ...

  4. UVA 1626 区间dp、打印路径

    uva 紫书例题,这个区间dp最容易错的应该是(S)这种匹配情况,如果不是题目中给了提示我就忽略了,只想着左右分割忘记了这种特殊的例子. dp[i][j]=MIN{dp[i+1][j-1] | if( ...

  5. 紫书 例题8-4 UVa 11134(问题分解 + 贪心)

     这道题目可以把问题分解, 因为x坐标和y坐标的答案之间没有联系, 所以可以单独求两个坐标的答案 我一开始想的是按照左区间从小到大, 相同的时候从右区间从小到大排序, 然后WA 去uDebug找了数据 ...

  6. 紫书 例题8-3 UVa 1152(中途相遇法)

    这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...

  7. 紫书 例题8-12 UVa 12627 (找规律 + 递归)

    紫书上有很明显的笔误, 公式写错了.g(k, i)的那个公式应该加上c(k-1)而不是c(k).如果加上c(k-1)那就是这一次 所有的红气球的数目, 肯定大于最下面i行的红气球数 我用的是f的公式, ...

  8. 紫书 例题8-17 UVa 1609 (构造法)(详细注释)

    这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考. 这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到. 具体思路紫书上 ...

  9. 紫书 例题 9-5 UVa 12563 ( 01背包变形)

    总的来说就是价值为1,时间因物品而变,同时注意要刚好取到的01背包 (1)时间方面.按照题意,每首歌的时间最多为t + w - 1,这里要注意. 同时记得最后要加入时间为678的一首歌曲 (2)这里因 ...

随机推荐

  1. 即将到来的Autodesk 主要产品2015版 产品和API新功能在线培训(免费)

    一年一度的Autodesk主要产品和API在线培训课程在5月份即将開始.我们呈献给大家5个课程. 1. Revit 2015 产品新功能及API 概览 2. Vault 2015产品新功能及API 概 ...

  2. MongoDB查询、索引和聚合

    初始化mongodb数据库 > use deng switched to db deng > db.createCollection("jingdong") #无參数 ...

  3. Java IO(二) 之 InputStream

    源代码均以JDK1.8作为參考 前言: InputStream实现了两个接口Closeable和AutoCloseable: Closeable:JDK1.5中引入,Closeable接口中仅仅有一个 ...

  4. Invalid property 'sentinels' of bean class redis spring 错误修改

    /* * Copyright 2014-2015 the original author or authors. * * Licensed under the Apache License, Vers ...

  5. 熟悉了下HTTP协议

    HTML是一种用来定义网页的文本,会HTML,就可以编写网页: HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信.200表示一个成功的响应,后面的OK是说明.失败的响应有404 Not ...

  6. 一键解决 500、502和504 Internal Privoxy Error 问题(图文详解)

    最近获得一个SS帐号,手机,其他电脑都能上,但是在我的电脑上就是500 或 502  或 504,如下所示. 502 Read from server failed: Unknown error Th ...

  7. 索引-mysql索引创建、查看、删除及使用示例

    mysql索引创建.查看.删除及使用示例 1.创建索引: ALTER TABLE用来创建普通索引.UNIQUE索引或PRIMARY KEY索引. ALTER TABLE table_name ADD ...

  8. html中隐藏一个元素的方法

    display:none;                                                      隐藏不占位 opacity:0; fliter:alpha(opa ...

  9. AngularJs轻松入门(二)数据绑定

    数据绑定是AngularJs中非常重要的特性,我们看一下下面的例子: <!DOCTYPE html> <html ng-app> <head lang="en& ...

  10. CMake入门之创建一个基于PCL的最小工程

    最近在学习PCL,借助Cmake可省去繁琐的添加包含目录和依赖库操作. 一个典型的CMakeLists.txt内容通常为: cmake_minimum_required(VERSION 2.6 FAT ...