DMKaplony DMKaplony
关注数: 47 粉丝数: 35 发帖数: 971 关注贴吧数: 20
.. program p111; var     n,i,j,ans,t:longint;     key,a:array[0..10000]of longint;     f:array[0..2000,0..2000]of longint; begin     readln(n);     for i:=1 to n do         begin             read(t);             key[t]:=i;         end;     readln;     while not eof do         begin             for i:=1 to n do                 begin                     read(t);                     a[t]:=i;                 end;             //readln;             //             ans:=0;             //             fillchar(f,sizeof(f),0);             f[0,0]:=0;             for i:=1 to n do                 for j:=1 to n do                     begin                         if (a[i]=key[j]) then                             begin                             if (f[i,j]<f[i-1,j-1]+1) then                                 f[i,j]:=f[i-1,j-1]+1                             end                         else                         begin                         if f[i,j]<f[i,j-1] then                             f[i,j]:=f[i,j-1];                         if f[i,j]<f[i-1,j] then                             f[i,j]:=f[i-1,j];                         end;                     end;             //             ans:=ans+f[n,n];             //writeln(ans);         end; end. 为什么跑一个100*20*20的很慢??
NOIP导论 试题名称fallsongheightroundcolor 输入文件名fall.insong.inheightround.incolor.in 输出文件名fall.outsong.outheightround.outcolor.out 试题类型非交互式程序题非交互式程序题非交互式程序题非交互式程序题 时限1秒1秒1秒1秒 下落(fall) 〔问题描述〕 在直角坐标系上,有一个小球开始从坐标(x,y) x>0,y>0 处直线下落,每一秒钟一个单位距离,一直到X轴为止。然而,它可能在下落过程中碰到一些障碍物。障碍物可以看成是一些平行于X轴的水平线段,如果小球的Y坐标和障碍物的Y坐标相等,而X坐标在障碍物的两个端点X坐标之间(包括两个端点),这样小球就会延时5秒然后从障碍物的右端继续下落。 现给出小球的初始坐标 (x,y) ,以及每个障碍物的数据(三个整数 y x1 x2,分别表示这个障碍物的Y坐标,左、右端点的X坐标),编程求小球要几称钟才能到达X轴上。 〔输入文件:fall.in〕 第一行有两个整数x y表示小球初始坐标,1<=x,y<=1000。第二行有一个整数n(n<100),表示有n个障碍物。 下面有n行,每行三个整数(都在1到999之间),分别表示一个障碍物的数据(y x1 x2),其中x1<=x2。障碍物的高度都不相同。 〔输出文件:fall.out〕只一个整数,小球下落到X轴的秒数。 [样例:] 15 10 1 5 10  2015 12 3 10 10 20 15 10 20 5 20 5050 80 3 20 001 100 10 100 100 5 100 200 1522100 变音量(song) [问题描述] 你将要在元旦演奏一场吉他专场。但你不希望声音平淡,所以你希望每个曲之间都有变化。现在你已经确定了每个曲可以与上一个曲之间的音量的变化量,即每首曲开始,你可以对音量选择增加或减少一个指定的变化值。当然音量不可能为负数,也不能太高,因此必需保证每首曲音量在0和maxLevel之间(包含)。 你的任务是,根据已有的开始音量beginLevel 和每首曲之间的变化量,求出最后一首曲的最大可能音量。如果没有方案,输出 -1。 〔输入文件:song.in〕 文件第一行有三个整数,n, beginLevel, maxLevel,分别表示曲目数,开始量,最大限制音量。 下面有n-1行整数,第i行整数表示第i首曲与第i+1首曲之间的变化量。 〔输入文件:song.in〕 文件只一行一个数,答案。 [样例:] 4  5 10 5 3 75 8 20 15 2 9 10 10-1 圆排列(heightround) [问题描述] 有N个人顺时针围在一圆桌上开会,他们对身高很敏感。 因此决定想使得任意相邻的两人的身高差距最大值最小。 如果答案不唯一,输出字典序最小的排列,指的是身高的排列。 〔输入文件heightround.in〕 多组测试数据。 第一行:一个整数ng, 1 <= ng <= 5. 表示有ng组测试数据。 每组测试数据格式如下: 第一行: 一个整数N, 3 <= N <= 50 第二行, 有个N整数,  第i个整数表示第i个人的身高hi, 1<=hi<=1000。 按顺指针给出N个人的身高, 空格分开。 〔输出文件heightround.out〕 字典序最小的身高序列,同时满足相邻的两人的身高差距最大值最小。 ng行,每行对应一组输入数据。 〔样例〕 2 5 1   3   4   5   7 4 1   2   3   4(有两组测试数据) 1    3   5   7   4 1    2   4   3 彩色(color) [题目描述]   在直角坐标系上,有N个边平行于坐标轴的矩形。你的任务是把其中的K个矩形染色,使按次序放下后,可以看见的有色面积最大。可看见的意思就是这一部分没有被后面的矩形覆盖。   你的答案是返回K个整数,表示你染色的是哪K个矩形。如果有多种答案,输出字典序最小的。 [数据范围]   1<=N<=50; 1<=K<=N。   每个坐标值为[-10000,10000]之间的整数。 [输入文件 color.in]   第一行两个整数:N K   后面有N行,每行4个整数: x1 y1 x2 y2, 分别表示先后各个矩形的左下角坐标和右上角坐标。  [输出文件 color.out]   一行,K个整数:你的方案。 样例 输入3  2 1 1 5 3 3 2 7 4 2 5 9 77  4 1 1 5 4 2 2 4 3 4 0 6 2 7 1 9 4 1 5 4 7 6 5 9 7 2 5 8 6 输出1 20 2 3 6 样例解释:    
线段树套SBT。。 直接发了。。 program p1665; type     sbtnode=record         lsb,rsb,key,s:longint;         end;     intervaltree=record         tot,root,lc,rc:longint;         l,r,m,d:longint;         end; var     ctree:array[0..150003]of intervaltree;     sbt:array[1..18,0..100002]of sbtnode;     flag:boolean;     a:array[1..50001]of longint;     top:longint;     n,mm,i,ii:longint;     mid,o,v,lll,rrr,l,r,tt,k,max:longint;     ch:char; ////////////////---sbt LR; procedure lr(p:longint;var t:longint); var     k:longint; begin     k:=sbt[p,t].rsb;     sbt[p,t].rsb:=sbt[p,k].lsb;     sbt[p,k].lsb:=t;     sbt[p,k].s:=sbt[p,t].s;     sbt[p,t].s:=sbt[p,sbt[p,t].lsb].s+sbt[p,sbt[p,t].rsb].s+1;     t:=k; end; /////////////////---sbt RR; procedure rr(p:longint;var t:longint); var     k:longint; begin     k:=sbt[p,t].lsb;     sbt[p,t].lsb:=sbt[p,k].rsb;     sbt[p,k].rsb:=t;     sbt[p,k].s:=sbt[p,t].s;     sbt[p,t].s:=sbt[p,sbt[p,t].lsb].s+sbt[p,sbt[p,t].rsb].s+1;     t:=k; end; /////////////////---sbt Maintain; procedure maintain(p:longint;var t:longint;ff:boolean); begin     if ff then         begin             if sbt[p,sbt[p,sbt[p,t].lsb].lsb].s>                 sbt[p,sbt[p,t].rsb].s then                 rr(p,sbt[p,t].lsb)             else             if sbt[p,sbt[p,sbt[p,t].lsb].rsb].s>                 sbt[p,sbt[p,t].rsb].s then                 begin                     lr(p,sbt[p,t].lsb);                     rr(p,t);
首页 1 2 下一页