uva 10688 - The Poor Giant(区间dp)
来源:互联网 发布:大唐软件 编辑:程序博客网 时间:2024/05/01 10:59
题目链接: uva-10688
题意
有n个苹果,和一个数k,第i个苹果的重量是k+i(1<=i<=n). 已知其中只有一个苹果是甜的,所有比它重量轻的都是苦的,比它重的都是酸的。
为了要找出甜的苹果,就要去一个一个地吃它,且吃了咬了苹果就必须把它吃完,不管苹果是苦的还是酸的。
我们可以选择一个最佳策略,为了找到甜苹果吃总重量最少。
假设n=4, k=0,那么4个苹果的重量为1,2,3,4,假设先吃 #2个苹果,
如果#1是甜的,那么吃了2时就是酸的,那么就可以确定1是甜的了,共吃重量=2
如果#2是甜的,那么吃的重量=2
如果#3是甜的,那么2是酸的,可以推测甜的在(3,4)中的一个,然后吃3, 就可以确定哪个是甜的,共吃重量=2+3=5
如果#4是甜的,那么方案和上面一样,共吃重量=5
其实就类似二分法。
总共重量 = 2+2+5+5 = 14
(下面这一段原题题目描述有误,下面是正确的)
但这不是最佳方案,因为还可以有总重量更少的。
例如,先吃#1,
如果#1是甜的,花费1
如果#2是甜的,那么选择吃#3,不管#3是什么味道,都可以推测出#2和#4的味道,那么花费1+3
如果#3是甜的,第二次选择吃#3, 共花费1+3 = 4
如果#5是甜的,方案和上面一样, 共花费1+3 = 4
总共1+4+4+4 = 13,这方案更好。
给出n和k,问最少的吃的总重量是多少?
思路
明显的区间dp,不过因为题目描述有错误的地方(也怪自己没仔细看),结果很久没搞懂题意。f(i, j)表示第i个到第j个的最佳方案下的总重量。
对于f(i, j),可以选择i~j之间的其中一个mid先吃,然后确定mid的左右区间(i, mid-1)和(mid+1, j)的区间。
如果先吃了mid,那么确定左右区间的每一个苹果,都要增加第mid个苹果的重量,所以:
f(i, j) = min{ f(i, mid-1)+f(mid+1, j) + weight[mid]*(j-i+1) | i<=mid<=j}
代码
- Uva 10688 The Poor Giant (区间DP)
- UVA 10688 The Poor Giant (区间DP)
- uva 10688 - The Poor Giant(区间dp)
- UVA 10688 - The Poor Giant(区间DP)
- UVa 10688 The Poor Giant(区间DP)
- uva 10688 - The Poor Giant(区间DP,较难,题目难懂,状态转移难。。。)
- UVA - 10688 The Poor Giant
- uva 10688 - The Poor Giant(记忆化搜索)
- UVA - 10688 —— The Poor Giant
- UVA -10688(区间dp)
- UVa 10891 (区间DP)
- UVA 1336 Fixing the Great Wall(区间DP)
- uva 10003 Cutting Sticks (区间dp)
- uva 10003 Cutting Sticks(区间DP)
- UVA 10003 - Cutting Sticks(区间DP)
- UVA 1351 - String Compression(区间DP)
- Uva 10003-Cutting Sticks(区间DP)
- UVA 10617 Again Palindromes (区间dp)
- LoadRunner 11.50 下载+安装+补丁(图文并茂)
- 超过 130 个你需要了解的 vim 命令 - 转自开源中国
- UPnP协议编程实践(二)
- 程序员与卓别林
- git多人协作开发流程(以blog为例)
- uva 10688 - The Poor Giant(区间dp)
- Kinect for Windows SDK开发入门(十四):进阶指引 上
- U盘引导安装Solaris11_x86_64
- hdu 4715Difference Between Primes
- Finding Windows CE bugs with help from "Dr. Watson"
- Mysql错误总结
- Kinect for Windows SDK开发入门(十五):进阶指引
- 林彪总结当好师长的“九条经验”
- [HDU 3336]Count the String[kmp][DP]