切换到宽版
  • 6759阅读
  • 6回复

一题,我TLE了 [复制链接]

上一主题 下一主题
离线勇气les
 
只看楼主 倒序阅读 0 发表于: 2006-07-28
From Kazenomai
Fish && kitty 
 
 
背景 Background
    话说fish和kitty打算去郑州世纪欢乐园玩。因为那里都是些惊险刺激的项目,kitty很害怕,所以她就给fish出了个难题……
 
 
描述 Description  
    世纪欢乐园只有一条单向的路,从入口到出口(别问为什么……出个题不容易),在路边有各种游乐项目。kitty是小MM,她认为骑那么远的车只玩一个项目是不值得的,所以如果只能玩一个项目,她就不去了……因为kitty胆小,所以如果他们玩的相邻两个项目的惊险度差大于h,kitty就会害怕地哭……
  世纪欢乐园的各项目的惊险度fish都很清楚。为了和kitty好好玩(当然不能让kitty掉泪),他打算算出有多少种游玩的方案,和他们最多能玩几个项目。但他现在在听音乐,所以任务就是你的了~

  例如,有4个项目,惊险度分别是1 3 7 5,而kitty要求相邻两个的惊险度之差不超过2,则他们有1 3;1 3 5;3 5;7 5这4种方案,其中项目最多的方案是3个。
 
 
输入格式 Input Format
    输入文件有两行。
  第一行有n和h,用空格隔开;2<=n<=100000,0<=h<=1E9
  第二行有n个整数,为从入口到出口各个项目的惊险度,空格隔开
 
 
输出格式 Output Format
    输出共两行。
  第一行输出一个整数,表示方案数。因为方案可能有很多很多,所以你只需输出方案数模198964的余数
  第二行输出一个整数,表示最大的方案所包含的项目个数。
  如果不存在方案,则两行都输出0。(fish就会和kitty看电影去~)
 
 
样例输入 Sample Input  
  4 2
1 3 7 5
 
 
样例输出 Sample Output  
  4
3
 
 
时间限制 Time Limitation
  各数据点时限2s
离线r134a
只看该作者 1 发表于: 2006-07-28
貌似可以用数学方法......
.


祝大家明年NOIP大获全盛!


.
离线勇气les
只看该作者 2 发表于: 2006-07-29
楼上解释下,谢谢
离线r134a
只看该作者 3 发表于: 2006-07-29
引用第1楼bluetear2006-07-28 10:09发表的“”:
貌似可以用数学方法......



Sorry! 上次看错题了,在一楼的发言作废。


刚才又把题目看了一遍,好象可以用“类似”导弹拦截,最长不上升子序列的方法去做(只是类似):
设 f 为从第一个到第i 个游乐项目可以接受的最大游乐项目数。

令f[1]:=1;
for i:=2 to 总数 do
for j:=1 to i-1 do
  枚举前面的每一个惊险度,如果在可以接受的范围类,找一个 f 值最大的,然后:
  f:=f[j]+1;

最后枚举,输出一个最大的 f 值即可!

这个算法的正确性就不得而知了~~~~
如果不对,望指正!
.


祝大家明年NOIP大获全盛!


.
离线r134a
只看该作者 4 发表于: 2006-07-29
不过,我的第六感告诉我:可以用数学方法!
.


祝大家明年NOIP大获全盛!


.
离线勇气les
只看该作者 5 发表于: 2006-08-01
算法是正确的,就是会tle
(和我的一样)
离线勇气les
只看该作者 6 发表于: 2006-08-03
谁再看一下——
快速回复
限100 字节
 
上一个 下一个