10003 Cutting Sticks切割木棍

C++ 分而治之——木棒切割问题(二分法) 问题描述: 给出n根木棒,长度均已知,现在希望通过切割他们来得到至少K段长度相等的木棒(长度必须是整数),问这些相等的木棒最长有多长。例如对三根长度为15、10、24的木棒来说,假设K = 7,即需要至少7段长度相等的木棒,那么可以达到的最大长度为6。 注意事项 木棒的长度均为整数,在这种情况下,第一根木棒可以提供15 / 6 = 2根木棒,第二根可以提供10 / 6 = 1根,第三根可以提供4根... 阅读详情

题意是一段给定长的木棍,给出切割的位置,切割长度为A和B段,最小费用为A+B.求最小费用。

读过题之后,感觉和合并石子差不多。

但是想不出状态方程。不知道怎么转移状态。看过别人的思路。

加上木棍的开始和末尾当作分割点。

递归求解在从第i个分割点到第j个分割点,最小的费用,初始d[i][i+1]=0;其它的都为MAX;

则d[0][len+1]为整段木棍切割最小费用。

属于区间上的动态规划,枚举i到j之间的分割点即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

const int MAX=1<<20;
const int l=60;
int mind[l][l],c[l];
int len,cut;

int cost(int l,int r)
{
    if(mind[l][r]<MAX)return mind[l][r];

    for(int i=l+1;i<=r-1;i++)
    {
        int temp=cost(l,i)+cost(i,r);

        temp+=c[r]-c[l];
        if(temp<mind[l][r])
            mind[l][r]=temp;
    }
    return mind[l][r];

}
int main(){
    int money;
    while(scanf("%d",&len),len)
    {
          scanf("%d",&cut);
            c[0]=0;
    for(int i=1;i<=cut;i++)
        scanf("%d",&c[i]);

        c[cut+1]=len;
        money=0;
    if(cut)
    {
        for(int i=0;i<l;i++)
        for(int j=0;j<l;j++)
            mind[i][j]=MAX;
        for(int i=0;i<=cut;i++)
            mind[i][i+1]=0;
        cost(0,cut+1);
        money=mind[0][cut+1];
        }
        printf("The minimum cutting is %d.\n",money);
    }

    return 0;
}

木材加工题解 洛谷题目 题目描述 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段木头越长越好,你的任务是计算能够得到的小段木头的最大长度。木头长度的单位是cm。原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。 例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能切割出来的小段木头长度最长为5. 输入 第一行是两个正整数N和K(1 ≤ N ≤ 100000,1 ≤ K ≤ 100000000),N是原木的数目,K是需要得到的小段的数目。 接下来的N行,每行有一个1到100000000之间的正整数,表示一根原木的长度。 输出 能够切割得到的小段的最大长度。如果连1cm长的小段都切不出来,输出”0”。 样例输入 3 7 232 124 456 样例输出 114 立即下载

相关推荐

Spring Cloud 整合(一) CRUD

Springcloud 整合之 CRUDSpringcloud介绍功能概述为什么要选用Springcloud Springcloud介绍 功能概述 实现微服务 Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。 为什么要选用Springcloud

Kerwin-Lin的博客 1501

C++算法入门练习——木棒切割问题

给出n根木棒的长度,现在希望通过切割它们来得到至少k段长度相等的木棒(长度必须是整数),问这些长度相等的木棒的最大长度。然后因为我们找到的一个解可能不是最大的长度,因为可以有不同的解,因此应该是查找到第一个大于满足条件的。如果得到的小于给定的k,说明我们试错的f中的长度取大了,应该取小一些,否则应该取大一些。木棒切割问题,这里我们建立一个f求每次得到的木棒段数,直至我们得到的可以满足给定的k。

u011708235的博客 582

告别数据丢失焦虑:用Python手把手实现Reed-Solomon码(附完整代码)

本文详细介绍了如何使用Python实现Reed-Solomon纠错码(RS码),帮助开发者有效防止数据丢失。通过基础编解码实战、文件保护方案和高级性能优化技巧,读者可以轻松掌握这一前向纠错技术,应用于物联网、文件存储和网络传输等场景,提升数据可靠性。

weixin_42527160的博客 222

c++木材加工

木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。N和K(1≤N≤100000,1≤K≤200000),N是原木的数目,K是需要得到的小段的数目。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度L。原木的长度都是正整数,我们要求得到的小段木头的长度也是正整数。输出能够切割得到的小段的最大长度。第2题 木材加工。木头长度的单位是cm。

浪子回头 812

【Zabbix实战之部署篇】Docker部署Zabbix+grafana监控平台

【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台

jks212454的博客 2577

基于遗传算法改进BP神经网络的电池容量SOC预测

,遗传算法BP神经网络能很好的实现对电池容量soc的训练和预测,BP神经网络是一种成熟的神经,相对于其他神经网络,拥有很多的训练函数,传递函数,可以调节的参数非常多,对各种问题都可以达到一个比较理想的效果,关键看如何调试参数,选择训练传递函数,遗传算法改进BP神经网络的初始权值阈值,达到改进BP神经网络的目的,从而更好的实现对电池容量SOC的预测

abc991835105的博客 766

枚举算法实践2-切割木棍 c++

题目描述 我们有n根的木棍。现在从这些木棍中切割出来m条长度相同的木棍,问这m根木棍最长有多长? 输入数据 第一行输入两个数字,n和m n(1<=n<=1000)为木棍数目 m(1<=m<=1000)为需要切割出的相同长度的木棍数目 随后n个正整数,表示原始木棍的长度(<=10000) 输出数据 每组输出一行结果,表示切割后绳子的最长长度(保留两位小数) 样例输入 4 5 5 6 7 8 样例输出 4.00 初始思路 因为要求切割的最大长度,本来想着从木棍长度中找到最

m0_51230983的博客 2190

ThingsBoard PE专业版解决方案技术文档——温度&湿度

温湿度解决方案

weixin_67440240的博客 818

UVa Problem 10003 Cutting Sticks (切割木棍)

// Cutting Sticks (切割木棍) // PC/UVa IDs: 111105/10003, Popularity: B, Success rate: average Level: 2 // Verdict: Accepted // Submission Date:

寂静山林 2897

OCS2 入门教程(一)

OCS2 是专为切换系统优化控制(ptimalontrol forwitchedystems,OCS2)定制的 C++ 工具箱。该工具箱提供以下算法的高效实现:SLQ:连续时间域约束 DDPiLQR:离散时域约束 DDPSQP:基于 HPIPM 的多重打靶算法IPM: 基于非线性内点法的多重搜索算法SLP:基于 PIPG 的顺序线性规划算法OCS2 通过增强拉格朗日法(Augmented Lagrangian)或松弛障碍法(relaxed barrier methods)处理一般路径约束。

机器人控制与仿真应用 7836

加密算法:深度解析Ed25519原理

在 Solana 开发过程中,我一直对 Ed25519 加密算法 如何生成公钥、签名以及验证签名的机制感到困惑。为了弄清这一点,我查阅了大量相关资料,终于对其流程有了更清晰的理解。在此记录实现过程,方便日后查阅。

盹猫的博客 1万+

UVa 10003 Cutting Sticks(DP 最优木棍切割)

题意   要把一根长为l的木棍切成n+1段   切割的位置分别为c[1],c[2],...,c[n]   每次切割的成本为当前切割的那一段的长度   如长度100的切成两段成本为100   求完成切割的最小成本 和最优矩阵链乘那题很像  不用打印路径更简单了  在木棍上加两个点c[0]=0  c[n+1]=l   d[i][j]表示把这段木棍的第i到j个点完成切割的最小成本   如果j=i+1 

Deng's site \# 2092

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

UVA Problem 10003 Cutting Sticks (切割木棍)

Emma and Eric are moving to their new house they bought after returning from their honeymoon. Fortunately, they have a few friends helping them relocate. To move the furniture, they only have two compact cars, which complicates everything a bit. Since the

风的记忆 407

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【解题报告】uva10003_Cutting Sticks(切割木棍, dp)

10003 - Cutting Sticks Time limit: 3.000 seconds 题目大意: 有5种面值的硬币,面值分别为1、5、10、25、50。给定所需找零的金额数,求用上述硬币找零,共有多少种硬币的组合方式(不考虑硬币顺序,如[1,5]和[5,1]为一种组合方式)。 解题思路:

huanghuchuan 940

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

UVa 10003 Cutting Sticks

 题目是经典DP,和矩阵相乘的最小乘法次数那个是一样的 f[i,j]=min{f[i,k]+f[k,j]}+j-i (k是i,j之间的木棍切割点) f[0,L]就是答案。由于划分阶段貌似比较困难,于是毫不犹豫的使用记忆化搜索开始的时候f数组开了1000*1000(由于L最大为1000),然后转移状态的时候从把所有的切割点过一遍,复杂度是O(kn^2),k于是提交,居然TLE

个人独立博客http://www.acb0y.cn/ 2028

UVA 10003 Cutting Sticks 区间DP+记忆化搜索

UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点。每次切割的费用为当前木棍的长度。求切割木棍的最小费用 输入输出 第一行是木棍的长度L,第二行是切割点的个数n,接下来的n行是切割点在木棍上的坐标。 输出切割木棍的最小费用 前话-区间dp简单入门 区间dp的入门下面博客写的非常好,我就是看的他们博客学会的,入...

weixin_30316097的博客 160

【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

Cutting Sticks(区间DP)

Cutting Sticks UVA - 10003 题意:给一个0-L长度的木板,然后给N个数,表示0-L之间的某个刻度,最后要用刀把每个刻度都切一下 使其断开,然后每次分裂的cost是分裂前的木板的长度。求整个分开之后的最小cost。 题解:   区间DP 设dp[i][j]为切割小木棍i~j的最小花费。则dp[i][j]=min(dp[i][k]+dp[k][j])+a[j]...

weixin_30784945的博客 117

uva 10003 Cutting Sticks (区间dp)

题目大意 一根长为l的木棍,上面有n个"切点",每个点的位置为c[i] 要按照一定顺序把每个点都砍段,最后变成了n+1段 每砍一次,就会有一个花费,例如长度为10,“切点”为2,那么砍完后会变成两段2,8, 那么花费为2+8=10 如果有多个“切点”,那么不同顺序切会得到不同的花费。 问最小花费是多少? 思路 注意要增加一个c[n] = l f(i, j) 表示(i,j)区间的最小花费 f(i, j) = min{ f(i,k)+f(k+1,j)+c[r]-c[l-1] | l<=k<k }

D_Double's Journey 2638

UVA - 10003 Cutting Sticks(dp和记忆化搜索两种解法)

题目大意: 有一根长度为L的木棍,还有n个切割点的位置(按照从小到大排列)。你的任务是在这些切割点的位置处把木棍切成n+1部分,使得总切割费用最小。每次切割的费用等于被切割木棍的长度。 例如,L = 10,切割点为2,4,7。如果按照2,4,7的顺序排序,费用为10+8+6=24,如果按照4,2,7的顺序,费用为10+4+6=20 解析: 这题有两种解法记忆化搜索和dp,但是状态转

小G的ACM之路 1245

uva 10003 Cutting Sticks 【区间dp】

题目:uva 10003 Cutting Sticks 题意:给出一根长度 l 的木棍,要截断从某些点,然后截断的花费是当前木棍的长度,求总的最小花费? 分析:典型的区间dp,事实上和石子归并是一样的,花费就是石子的和。那么久不用多说了。 AC代码: #include<iostream> #include<cstdio> #inclu...

weixin_30426957的博客 87

UVA 10003 切木棍 Cutting Sticks

UVA 10003

阿巴阿巴 344

uva 10003——Cutting Sticks

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

坚持不懈 497
上一篇: UVa 116 Unidirectional TSP
下一篇: Parencodings
kryi
博客等级 码龄14年 5粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值