UVA 10003 Cutting Sticks (区间DP+四边形不等式)

UVA10003 切木棍 Cutting Sticks(区间DP、细节) 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]。 总时间复杂度为 阅读详情

UVA 10003 Cutting Sticks (区间DP+四边形不等式)

这题是一个典型的区间DP的问题,用dp[i][j]表示区间i-j内的最优解,最终的答案是dp[0][n+1]

状态转移方程为:
dp[i][j]=min(dp[i][k]+dp[k][j]+该区间的木棍长度,dp[i][j])

如果仅仅是区间DP,状态量为O(n2),每个状态的决策有O(n)个,则总的时间复杂度为O(n3)。

如果通过四边形不等式优化状态的决策,可以将时间复杂度降低为O(n2)。

使用四边形不等式的前提:
1、d(i,j)+d(i+1,j+1)<=d(i,j+1)+d(i+1,j),其中d(i,j)表示状态量。
也等价于,令f(i,x)=d(i,x)-d(i+1,x),f(i,x)关于自变量x递增;
也等价于,令f(x,j)=d(x,j+1)-d(x,j),f(x,j)关于自变量x递减;
2、状态转移方程有类似形式:
dp(i,j)=min(d(i,k)+d(k,j)+w(i,j,k))

四边形不等式结论:
s(i,j-1)<=s(i,j)<=s(i+1,j),其中s(i,j)表示d(i,j)的最佳决策点,具体证明过程详见:
https://blog.youkuaiyun.com/qq_41695941/article/details/83025188

AC代码如下:

#include<bits/stdc++.h>
using namespace std;
int l,n;
int point[55];
int dp[55][55];
int si[55][55]; 
int solve(void)
{
	memset(dp,0x3f,sizeof(dp));
	for(int i=1;i<=n;i++)
	{
		dp[i-1][i]=0;
		si[i-1][i]=i;
	}
	for(int s=2;s<=n;s++)
	{
		for(int i=0;i<=n-s;i++)
		{
			int j=i+s;
			for(int k=si[i][j-1];k<=si[i+1][j];k++)
			if(dp[i][j]>dp[i][k]+dp[k][j]+point[j]-point[i]){
				dp[i][j]=dp[i][k]+dp[k][j]+point[j]-point[i];
				si[i][j]=k;
			}
		}
	}
	return dp[0][n];
}
int main(void)
{
//	freopen("out.txt","w",stdout);
	point[0]=0;
	while(~scanf("%d",&l)&&l)
	{
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		scanf("%d",&point[i]);
		point[++n]=l;
		printf("The minimum cutting is %d.\n",solve());
	}
//	fclose(stdout);
}
//100
//3
//25 50 75
//10
//4
//4 5 7 8
//0
四、Burpsuite工具之proxy模块详解-intercept功能 过了一个年,感觉好久都没有更新了,今天就从burpsuite的更新开始吧。前面已经说过了burpsuite的安装和proxy代理的配置,今天说一下proxy模块中非常有用的intercept功能。intercept是拦截的意思,在这里相当于拦截请求,可以实时的对请求进行拦截,然后请求参数的篡改,再把请求放通,从而达到实时修改请求的功能intercept的总体界面如下图所示其中下图红框中是可以修改请求目标的相关信息。 阅读详情

相关推荐

2. Netty使用JSerialComm进行串口读取(二)

现在开始处理这些问题 第一个问题:串口读取超时异常一路传播到最后也没有处理。 ​ 第二个问题:即使处理了该异常,程序仍然退出,这不能满足一些实际使用要求需求。该问题与设置很长的读取超时时间没关系,无论多长到时间后总会退出。

s3c2410的博客 2461

高频PCB设计核心挑战与工程实践解析

高频PCB设计是电子工程中的重要领域,涉及电磁场理论、信号完整性和电源完整性等核心技术。在射频段工作时,趋肤效应和介质损耗成为主要挑战,导致信号衰减和失真。通过优化传输线阻抗控制、采用低损耗板材和精确的叠层设计,可以有效提升电路性能。这些技术在无线通信、雷达系统和高速数字电路中有广泛应用。特别是在5G和毫米波应用中,高频PCB设计的关键技术如过孔优化和屏蔽罩设计直接影响系统性能。工程实践中,结合矢量网络分析仪等测试工具,能够精准诊断和解决高频电路中的电磁兼容问题。

dingdi3021的博客 485

Android 车载应用开发与优化(1) - CarLauncher 核心功能与动态集成探秘

本文深入探讨了Android车载应用开发中CarLauncher的核心功能与实现原理。作为车载系统的“脸面”,CarLauncher不仅提供应用入口,更通过动态集成技术将地图、音乐等关键信息嵌入桌面,以保障驾驶安全与体验。文章详细解析了其源码结构、权限配置、应用启动机制以及基于Activity嵌入的动态集成黑魔法,为开发者提供了从基础认识到高级优化的完整指南。

weixin_29239279的博客 282

UVA 10003 Cutting Sticks——四边形不等式优化dp

不能用单调队列做的原因是切割点固定很明显小区间的权值小于大区间,交错区间的权值等于两区间的交加上两区间的并,权值满足区间包含的单调性,状态满足四边形不等式性质,所以第三重循环可以优化,设s【i】【j】为区间【i,j】的最优切割点,那么求解dp【i】【j】时只需要遍历s【i】【j-1】~s【i+1】【j】即可,复杂度为n^2#include &lt;cstdio&gt; #include &lt;c...

hao_zong_yin的博客 665

【具身算法】VLA算法-Diffusion Policy

《扩散策略:多模态机器人控制的新方法》摘要 本文提出了一种基于扩散模型的机器人控制策略(DiffusionPolicy),用于解决视觉运动控制中的多模态行为、高维动作空间和训练稳定性问题。该方法利用去噪扩散概率模型(DDPM)生成动作序列,通过迭代优化处理复杂动作分布,显著提升了性能。实验表明,在15项机器人操作任务中,扩散策略平均性能提升46.9%,有效解决了传统显式/隐式策略的局限性。其核心优势在于:1)优雅建模多模态动作分布;2)适应高维动作空间;3)训练过程稳定。未来工作将探索与强化学习的结合及计算

puzhinan7781的博客 1390

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

m0_46364958的博客 4345

Cutting Sticks-uva10003 紫书P278 动态规划+四边形不等式优化

个人认为动态规划的难点有两个:什么时候能用动态规划?状态转移方程怎么写? 首先要明确为什么是用动态规划解这道题? 分析这道题:当我们把木棒从某点切割时,还要继续切割剩下的两段木棒。我们当然希望剩下的两段木棒在切割时花费是最少的,那么在继续切割的时候我们仍然希望新切割出来的木棒是花费最少的,那么在切割大段木棒的时候会用到小段木棒的切割结果,也就是说我们需要先确定小段木棒的最佳结果来推出大段木棒的最佳结果,这里就用到了动规的思想。 解决了能不能用动规的问题后就是怎么写状态转移方程? 如图,将左右端点人为地定义

Shanhj的博客 197

四边形不等式优化_石子合并问题_C++

  在动态规划中,经常遇到形如下式的状态转移方程:     m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max)   上述的m(i,j)表示区间[i,j]上的某个最优值。w(i,j)表示在转移时需要额外付出的代价。该方程的时间复杂度为O(N3)      下面我们通过四边形不等式来优化上述方程,首先介绍什么是“区间包含的单调性”和“...

weixin_30322405的博客 438

OpenRubrics:自动化评估工具优化LLM对齐效果

在大型语言模型(LLM)应用中,模型输出与人类价值观的对齐是关键挑战。传统人工反馈强化学习(RLHF)依赖大量标注,成本高且一致性差。OpenRubrics作为开源工具,通过结构化准则实现自动化评估,显著提升效率。其核心原理是将主观评价转化为可量化的多维指标,支持动态权重调整,并兼容主流RLHF框架。该工具在降低标注成本的同时,通过Fleiss' Kappa系数等指标保证评估一致性,适用于多语言和医疗等专业领域,为LLM对齐提供了工程化解决方案。

weixin_28730037的博客 357

置顶必读(1) |《YOLOv8实战:从入门到深度优化》专栏导读,带你一文了解本专栏!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 14万+

Cutting Sticks UVA - 10003(DP - 四边形不等式优化)

四边形不等式优化: 花费用 表示 四边形不等式 : 称其满足凸四边形不等式 决策单调性 : 三个定理: 定理一: 如果 同时满足四边形不等式 和 决策单调性 ,则 也满足四边形不等式定理二:当定理一的条件满足时,让取最小值的 为,则 定理三: 为凸当且仅当 由定理三知 判断 是否为凸即判断 的值随着i的增加是否递减 于是求 值的时...

ltrbless的博客 248

Aurix TC3xx系列MCU DMA模块配置方法(二)

本文主要基于英飞凌Aurix TC3xx系列MCU,通过EB tresos配置工具,介绍DMA驱动模块的配置方法。

m0_38045338的博客 2850

uva 10003 Cutting Sticks

区间dp 的题,第一次接触。

烟杀流年 876

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UVA - 10003 Cutting Sticks(区间DP)

传送门 此问题类似于最优矩阵链乘,只不过将子问题之间的乘法换成了相互递推的求和 状态转移 设

Happig的博客 245

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UVA 10003 Cutting Sticks

题意:在给出的n个结点处切断木棍,并且在切断木棍时木棍有多长就花费多长的代价,将所有结点切断,并且使代价最小。 思路:设DP[i][j]为,从i,j点切开的木材,完成切割需要的cost,显然对于所有DP[i][i+1]=0,记w[i][j]为从i,j点切开的木材的长度,因此可以枚举切割点,dp[i][j]=min(dp[i][k]+dp[k][j])+w[i][j],k就是枚举的切割点...

dianche1354的博客 110

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Cutting Sticks UVA - 10003 切木棍 线性dp

题目链接 有一根长度为L(L<1000)的棍子,还有n(n<50)个切割点的位置(按照从小到大排列)。你的任务是在这些切割点的位置处把棍子切成n+1部分,使得总切割费用最小。每次切割的费用等于被切割的木棍长度。例如,L=10,切割点为2, 4, 7。如果按照2, 4, 7的顺序,费用为10+8+6=24,如果按照4, 2, 7的顺序,费用为10+4+6=20。 【分析】 设d(i,j)为切割小木...

Nicolas的博客 735

uva 10003 Cutting Sticks dp(区间, 简单)

/* uva 10003 记忆化搜索 0.690s */ #include #include #include #include #include #include #include using namespace std; #define all(x) (x).begin(), (x).end() #define for0(a, n) for (int (a) = 0; (a) < (n);

便纵有千种风情 601

UVa 10003 - Cutting Sticks(白书,区间DP)

题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=12&problem=944&mosmsg=Submission+received+with+ID+17137424 思路:比较裸的区间DP吧,状态转移方程为dp[i][j]=min(dp[i]

Java识堂,一个有干货的微信公众号 354

uva 10003——Cutting Sticks

题意:给定一长为L的木棍和n个切割点,每次切割的费用为切割的两端的长度和,求最小的费用。 思路:dp,子问题是区间(i,j)的最小费用,临界是(i,j)只有一个切割点。 code:

坚持不懈 497

uva 10003 Cutting Sticks (动态规划:区间DP)

Cutting Sticks You have to cut a wood stick into pieces. The most affordable company, The Analog Cutting Machinery, Inc. (ACM), charges money according to the length of the stick being cut. Their proc

sdau20163940的博客 535

UVA 10003 Cutting Sticks 切木棍 dp

题意:把一根木棍按给定的n个点切下去,每次切的花费为切的那段木棍的长度,求最小花费。 这题出在dp入门这边,但是我看完题后有强烈的既是感,这不是以前做过的石子合并的题目变形吗? 题目其实就是把n+1根木棍合并成一只长木棍,花费为合并后的木棍长度。 于是我很开心地用优先队列敲完代码,wa了。。。 后来发现两个木棍的序号必须是连续的,用优先队列会把序号打乱。每次删减中间的一个数又很费时间,于是...

ithome 282

UVA-10003 Cutting Sticks (动规-四边形不等式dp)

题目:           You have to cut a wood stick into pieces. The most affordable company, The Analog Cutting Machinery, Inc. (ACM), charges money according to the length of the stick being cut. Their proc...

L-qf 的博客 274

【UVa 10003】【区间DP】Cutting Sticks【有一个长为L的木棍,木棍中间有n个切点。每次切割的费用为当前木棍的长度。求切割木棍的最小费用。】

传送门:http://vjudge.net/contest/141412#problem/D (密码:cd) 题意:有一个长为L的木棍,木棍中间有n个切点。每次切割的费用为当前木棍的长度。求切割木棍的最小费用。 思路: d(i, j)表示切割第i个切点到第j个切点这段所需的最小费用。则有d(i, j) = min{d(i, k) + d(k, j)} + a[j] - a[i]; (

魔笛手的博客 1231

区间DP(切木棍,uva 10003)

每次切割的费用等于被切割的木棍长度。 #include using namespace std; int l,n; int c[60]; int dp[60][60]; int main() { while(scanf("%d",&l),l) { scanf("%d",&n); for(int i=1;i<=n;i++)

xl2015190026的博客 674
上一篇: UVA1625 Color Length(线性DP
下一篇: UVA1331 Minimax Triangulation (区间DP)
WedsonLin
博客等级 码龄7年 1粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值