34 条题解
-
0fenghao LV 10 @ 2009-11-03 10:08:47
一个很阴的地方。。73分的注意下周期边界的情况。。从t到t+1这段,t+1还是属于前半周期的!
以下是程序的要害地方:
(f[j]-1) mod (t shl 1) -
02009-11-02 21:12:37@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 1931ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 4603ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:6534ms第26个AC
-
02009-11-02 20:33:31@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msdp
f 表示第i个数作为下降区间的j个最多的个数
f 表示第i个数作为上升区间的j个最多的个数
状态转移就明显了 -
02009-11-02 20:05:00@
判断周期我用的
if ((odd(f[j] div turn)) and (f[j] mod turn0)) or ((not odd(f[j] div turn)) and (f[j] mod turn=0))
然后剩下的就很简单了 -
02009-11-02 19:50:39@
程序要精简!
一维的转移方程f[j]表示达到第j个东西时候 最长序列个数
假如要在f[j]所表示的序列后面加上一个数据i
那么就判断一下这个数据要比j大还是小
怎么判断????
根据 半周期 以及 f[j]已经达到的序列个数来判断,
如果f[j]的个数是属于前半周期 就要递减
如果f[j]的个数是属于后半周期 就要递增(关于一些临界值,特别是某个数处于周期的边界,要好好想想,这个数到底是属于前半周期,还是后半周期……)
大家自己看吧 我实在懒得打字 O(∩_∩)O~
才18行
————————————————晒下程序—————————————————
var n,t,i,j,max,k:longint;
h,f:array[0..2010] of longint;
begin
readln(n,t);
for i:=1 to n do read(h[i]);
for i:=1 to n do f[i]:=1; //初始化
for i:=2 to n do
for j:=1 to i-1 do
if f[i] -
02009-11-02 14:55:12@
强烈要求出题人把题目说明白,没看懂题
-
02009-11-02 21:16:12@
楼下的程序怎么这么慢...
-
02009-11-02 19:10:42@
Accepted 有效得分:100 有效耗时:0ms
哦也,10多分钟一遍AC~~好久没做DP了,感觉这题也比较简单,没有难度3吧,就是一个最长不下降序列的变形……
中午刚AC就写了题解,居然有人看不懂还说我歪打正着=.=,所以下午来个更详细的……
我的方法是:
题目很容易发现规律,像周期t=3时,选出下面数是符合条件的:
4,(3,2,1),(5,6,7),(5,3,1),(2,8,10) …… 高度
6 1 2 3 4 5 6 1 2 3 4 5 6 …… 我给的编号
为什么编号是这个呢?我们可以发现,除了所选的第一个之外,后面都是有很强规律性的(即增减性),在编号1~t都比自己前一个小,编号t+1~2*t都比自己前一个大!然后就可以得到方程:f=max(f,f[j,k-1])(1
-
02009-11-02 13:19:49@
叙述有点不尽如人意- -咨询了一下内部人士才知道题意
话说楼下的太强了,直接歪打正着啊 -
02009-11-02 11:39:20@
看来不是搜索的题目...
编译通过...
├ 测试数据 01:运行超时...
├ 测试数据 02:运行超时...
├ 测试数据 03:答案正确... 1ms
├ 测试数据 04:运行超时...
├ 测试数据 05:运行超时... -
02009-11-02 11:00:19@
沙发又没了.....
-
02009-11-02 08:58:26@
地下室
-
02009-11-02 08:46:13@
板凳。。。。
-
02009-11-02 08:45:59@
sofa~!~!~!~!