作业帮 > 综合 > 作业

采摘西瓜 oi题采摘西瓜Time Limit:1030MS Memory Limit:65536KDescription

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/08 02:03:30
采摘西瓜 oi题
采摘西瓜
Time Limit:1030MS Memory Limit:65536K
Description
佳儿爷爷经常给她讲故事,某天就讲了一个采摘西瓜的故事(因为她闹着要买...).某年某村的瓜农把一个个西瓜放在象一条直线的水库大坝上,叫本村的小朋友去大坝搬西瓜,谁的西瓜搬走得多,谁就是胜者.搬西瓜必须遵守的原则是:西瓜一个一个搬,可以从任何位置开始搬运,按西瓜所摆放的位置,只能往后取西瓜,取走的西瓜重量不得大于前面已经搬走西瓜的重量(除第一个西瓜).你能知道他们最多一次能搬走多少个西瓜吗?
Input
第一行为n(小于10000),西瓜的个数,第二行为n个正整数(小于30000),表示n个西瓜的重量(以克为单位),各个之间用一个空格隔开
Output
最多一次能搬走的西瓜个数
Sample Input
7
5 4 7 3 2 2 1
Sample Output
6
Source
我要正确的 pascal源代码 加油哦
NLOGN的最长不下降子序列
最长不下降子序列2007-03-01 09:381.正常方法,动态规划,n^2
2.基于二分搜索的优化 nlogn
一个一个读入(正反都可以),然后维护一个序列res,res[i]表示长度为i的最长不下降子序列的开头(反做)/结尾(正做)的最优情况(正做是最小,反做是最大),对于每一个数字list[i],找到一个合适的位置,覆盖或者插入.
原理,使基于每一个阶段,事实上能且只能对一个状态发生优化,也就是,事实上每次虽然有n个决策,但是真正能被转移,也就是符合转移条件(最优性质)的决策只发生一次,而这个决策可以通过二分检索找到,nlogn.
例如 3 9 4 7 8 7 8 9 反做
s1 ins-9
res 9 0 0 0 0 0 0 0
s2 ins-8
res 9 8 0 0 0 0 0 0
s3 ins-7
res 9 8 7 0 0 0 0 0
s4 ins-8
res 9 8 8 0 0 0 0 0
s5 ins-7
res 9 8 8 7 0 0 0 0
s6 ins-4
res 9 8 8 7 4 0 0 0
s7 ins-9
res 9 9 8 7 4 0 0 0
s8 ins-3
res 9 9 8 7 4 3 0 0
可见,左后的最长序列长度为6,使以3开头的,至于具体输出,可以通过记录父亲结点的方法记录路径
事实上的答案是 3 4 7 7 8 9 或者 3 4 7 8 8 9 etc...
3、一些思考
注意到,倒做加记录,最后是有字典序的,也就是会搜出字典顺序最大的那组解,反做假记录,使最小的那组解
贴个程序
procedure midsearch(num:longint);
var top,bot,mid:longint;
begin
top:=0;bot:=nk+1;
if bot-top1 do
begin
mid:=(top+bot) div 2;
if list[num]