DP算法的经典题目

本文介绍了四个经典的动态规划问题:最小代价子母树、背包问题、商店购物和旅游预算,通过实例详细阐述了如何运用动态规划解决这些问题,旨在帮助读者深入理解动态规划算法的应用。
摘要由CSDN通过智能技术生成
1.  石子合并                               
在一个圆形操场的四周摆放着N堆石子(N<=  100),现要将石子有次序地合并成一堆.规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.编一程序,由文件读入石子堆数N及每堆栈的石子数(<=20). 
(1)选择一种合并石子的方案,使得做N-1次合并,得分的总和最小; 

(2) 如果各堆石子构成一环形,选择一种合并石子的方案, 使得做N-1次合并,得分的总和最小; 

输入数据: 

第一行为石子堆数N; 

第二行为每堆的石子数,每两个数之间用一个空格分隔. 

输出数据: 

从第一至第N行为得分最小的合并方案.第N+1行是空行.从第N+2行到第2N+1行是得分最大合并方案.每种合并方案用N行表示,其中第i行(1<=i<=N)表示第i次合并前各堆的石子数(依顺时针次序输出,哪一堆先输出均可).要求将待合并的两堆石子数以相应的负数表示. 

输入输出范例: 

输入: 



4   5  9  4 
 输出: 

-4  5  9 -4 

-8 -5 9 

-13  -9 

22 

  

4  -5  -9  4 

4  -14  -4 

-4  -18 

22 


2. 最小代价子母树  
 设有一排数,共n个,例如:22 14 7 13 26 15 11.任意2个相邻的数可以进行归并,归并的代价为该两个数的和,经过不断的归并,最后归为一堆,而全部归并代价的和称为总代价,给出一种归并算法,使总代价为最小. 
输入、输出数据格式与“石子合并”相同。 

输入样例: 



12 5 16 4 
 输出样例: 

-12 -5 16 4 

17 -16 -4 

-17 -20 

37


3. 背包问题  
 设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为XK,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于XK,而价值的和为最大。 
输入数据: 

第一行两个数:物品总数N,背包载重量XK;两个数用空格分隔; 

第二行N个数,为N种物品重量;两个数用空格分隔; 

第三行N个数,为N种物品价值; 两个数用空格分隔; 

输出数据: 

第一行总价值; 

以下N行,每行两个数,分别为选取物品的编号及数量; 

输入样例: 

4 10 

2 3 4 7 

1 3 5 9 
 输出样例: 

12 

2 1 

4 1


4. 商店购物  
某商店中每种商品都有一个价格。例如,一朵花的价格是2 ICU(ICU 是信息学竞赛的货币的单位);一个花瓶的价格是5 ICU。为了吸引更多的顾客,商店提供了特殊优惠价。特殊优惠商品是把一种或几种商品分成一组。并降价销售。例如:3朵花的价格不是6而是5 ICU ;2个花瓶加1朵花是10 ICU不是12 ICU。 
编一个程序,计算某个顾客所购商品应付的费用。 要充分利用优惠价以使顾客付款最小。请注意,你不能变更顾客所购商品的种类及数量, 即使增加某些商品会使付款总数减小也不允许你作出任何变更。假定各种商品价格用优惠价如上所述, 并且某顾客购买物品为:3朵花和2个花瓶。那么顾客应付款为14 ICU因为: 

1朵花加2个花瓶: 优惠价:10 ICU 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值