UVA 10003 Cutting Sticks 区间DP+记忆化搜索
UVA 10003 Cutting Sticks+区间DP
纵有疾风起
题目大意
有一个长为L的木棍,木棍中间有n个切点。每次切割的费用为当前木棍的长度。求切割木棍的最小费用
输入输出
第一行是木棍的长度L,第二行是切割点的个数n,接下来的n行是切割点在木棍上的坐标。
输出切割木棍的最小费用
前话-区间dp简单入门
区间dp的入门下面博客写的非常好,我就是看的他们博客学会的,入门简单,以后的应用就得靠自己了。
https://blog.csdn.net/qq_41661809/article/details/81487613 看懂了,基础入门
https://blog.csdn.net/qq_40772692/article/details/80183248 略微进阶些
https://www.cnblogs.com/HDUjackyan/p/9123199.html 专题训练+代码实现
解题思路
- 使用动态规划,定义\(dp[\ i\ ][\ j\ ]\)为切割木棍\(i-j\)的最优费用,然后使用区间dp来进行处理
- 或则使用搜索算法进行,但是为了降低复杂度,一般会使用记忆化搜索。
代码
// 动态规划解法
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
int cut[100];
int dp[100][100];
int main()
{
int L, n;
while(scanf("%d",&L) && L)
{
memset(dp, inf, sizeof(dp));
cin>>n;
for(int i=1; i<=n; i++){
cin>>cut[i];
}
cut[0]=0;
cut[n+1]=L;
for(int i=0; i<=n; i++)
dp[i][i+1]=0; //相邻两个切割点之间是一段木棍,根据dp的含义,它们的值为零
for(int len=2; len<=n+1; len++) //枚举区间长度,从长度为2开始
{
for(int i=0; i+len<=n+1; i++) //起点要从0开始
{
int j=i+len; //终点
for(int k=i+1; k<j; k++) //枚举断点
{
dp[i][j]=min(dp[i][k]+dp[k][j]+cut[j]-cut[i], dp[i][j]);
}
}
}
cout<<"The minimum cutting is "<<dp[0][n+1]<<"."<<endl;
}
return 0;
}
//记忆化搜索 搜索真万能!!!
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
const int INF = 0x3f3f3f3f;
int c[N] ,dp[N][N];
int len , n;
int d(int l, int r) {
if(r - l == 1) {
return 0;
}
if(dp[l][r] > 0) {
return dp[l][r]; //算过>0,就不要重新再算了
}
dp[l][r] = INF;
for(int i = l; i <= r; i++) {
dp[l][r] = min( dp[l][r], d(l,i)+d(i,r) + c[r] - c[l]);
}
return dp[l][r];
}
int main() {
while(scanf("%d",&len) != EOF && len) {
scanf("%d",&n);
for(int i = 1; i <= n; i++) {
scanf("%d",&c[i]);
}
c[0] = 0;
c[n+1] = len;
memset(dp,0,sizeof(dp));
int ans = d(0, n+1);
printf("The minimum cutting is %d.\n",ans);
}
return 0;
}
//---------------------
//作者:HelloWorld10086
//来源:CSDN
//原文:https://blog.csdn.net/HelloWorld10086/article/details/40626461
//版权声明:本文为博主原创文章,转载请附上博文链接!
UVA 10003 Cutting Sticks 区间DP+记忆化搜索的更多相关文章
- uva 10003 Cutting Sticks(区间DP)
题目连接:10003 - Cutting Sticks 题目大意:给出一个长l的木棍, 再给出n个要求切割的点,每次切割的代价是当前木棍的长度, 现在要求输出最小代价. 解题思路:区间DP, 每次查找 ...
- UVA 10003 Cutting Sticks(区间dp)
Description Cutting Sticks You have to cut a wood stick into pieces. The most affordable company ...
- uva 10891 区间dp+记忆化搜索
https://vjudge.net/problem/UVA-10891 给定一个序列x,A和B依次取数,规则是每次只能从头或者尾部取走若干个数,A和B采取的策略使得自己取出的数尽量和最大,A是先手, ...
- (区间dp + 记忆化搜索)Treats for the Cows (POJ 3186)
http://poj.org/problem?id=3186 Description FJ has purchased N (1 <= N <= 2000) yummy treats ...
- 10003 Cutting Sticks(区间dp)
Cutting Sticks You have to cut a wood stick into pieces. The most affordable company, The Analog ...
- loj 1031(区间dp+记忆化搜索)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1031 思路:dp[i][j]表示从区间i-j中能取得的最大值,然后就是枚举分割点了. ...
- BZOJ1055[HAOI2008]玩具取名 【区间dp + 记忆化搜索】
题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ...
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
- hdu 4597 Play Game(区间dp,记忆化搜索)
Problem Description Alice and Bob are playing a game. There are two piles of cards. There are N card ...
随机推荐
- Python(3) 进制转换
2进制 :0b8进制: 0o16进制: 0x10进制:原来的数据 进制转换:bin() 方法:转化为 2进制 >>> bin(10)'0b1010'oct() 方法:转化为 8进制& ...
- Django【第3篇】:Django之模板语法
Django框架之第三篇模板语法(重要!!!) 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: ...
- 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途
目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...
- LeetCode--096--不同的二叉搜索树(python)
我的思路比较low直接看官方题解吧... class Solution: def numTrees(self, n: int) -> int: G = [0] * (n+1) G[0],G[1] ...
- 尝试用了一哈wepy框架的感想
恶心死我, 1 在项目里出现了中文乱码(utf-8在wpy文件里有中文和注释--编译后就转化成乱码, 把代码拷在另外的项目里,(该项目没有中文乱码现象,)编译出来就出现中文乱码, 然后我再在所拷的代码 ...
- lua脚本入门
在网上下载一些工程,里边常常存在.lua .sh .in .cmake .bat等文件 今天专门查了一下相关文件的作用 .sh 通常是linux.unix系统下的脚本文件(文本文件),用于调用默认的s ...
- 在asp.net 中怎样上传文件夹
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- [CSP-S模拟测试]:打扫卫生(暴力)
题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\ John$要把这 ...
- 使用Chrome逆向分析JS实战---分析google网站翻译器原文存放位置
剧透:就是使用了一下Chrome DevTools的Memory功能,通过已知的JS变量的值查找JS内存中变量的引用 一:不分析一下现有的网页翻译方法么? 总所周知,(As is well known ...
- 监听整个页面上的DOM树变化
在线预览 方法 使用<Web API 接口>的<MutationObserver> MutationObserver 网上查到的很多都是使用Mutation events的,但 ...