|
|
|
|
|
|
NOIP2011 day1 选择客栈
摘要:动态规划,设f[i,j]为前i个客栈中色调为j的可行方案,s[i,j]为前i个客栈中可以与之后色调为j的客栈搭配的客栈数,即有s[i,j]个客栈的色调为j,且该客栈与第i个客栈之间有符合条件的咖啡店,v[i]为第i个客栈的最低消费,c[i]为第i个客栈的色调a[i,j]为前i个客栈中色调为j的客栈的数目,则有:if v[i]<=p then s[i,j]:=a[i,j] else s[i,j]:=s[i-1,j];if c[i]<>j then f[i,j]:=f[i-1,j] else f[i,j]:=f[i-1,j]+s[i,j];时间复杂度为O(nk),但是会超空间,所
阅读全文
NOIP2011 day1 铺地毯
摘要:简单题,因为只询问一个点,最后铺的地毯一定在最上面,用数组记录每张地毯的信息,然后倒着寻找符合条件的地毯输出即可program carpet;var x,y:longint; n,i,j,ans:integer; a:array[1..10000,1..4] of longint;begin assign(input,'carpet.in'); reset(input); assign(output,'carpet.out'); rewrite(output); fillchar(a,sizeof(a),0); readln(n); for i:=1 to n
阅读全文
NOIP2010 引水入城
摘要:首先宽搜枚举第一行每一个点,判断能否到达最后一行的每一个点,如果无解则输出,如果有解,深搜记录第一行每一个点所能覆盖到的最左端和最右端(因为每一个点所覆盖到的必是一条线段,证明略),然后贪心求需要的最少点数即可program flow;const dx:array[1..4] of -1..1=(1,-1,0,0); dy:array[1..4] of -1..1=(0,0,1,-1);type node=record x,y:integer; end;var max:longint; s,n,m,ans,i,j,p,q,t,len:integer; f:array[1..500,1..500
阅读全文
NOIP2010 关押罪犯
摘要:一开始用的是先按怨气值由大到小排序,再判断二分图的方法,但是超时,多次调试未果,只好上网找了题解,下面介绍一个博客上的方法:http://blog.sina.com.cn/s/blog_918b1f91010175i2.htmlprogram prison;type node=record x,y,v:longint; end;var n,m,i,fx,fy:longint; a:array[1..100000] of node; father:array[1..40000] of longint;procedure quick(left,right:longint);var i,j,temp
阅读全文
NOIP2010 乌龟棋
摘要:动态规划,考虑到只有4种棋子,用F[i1,i2,i3,i4]表示数字1的卡片取了i1张,数字2的卡片取了i2张,数字3的卡片取了i3张,数字4的卡片取了i4张,可以取得最大的分数。program tortoise;var f:array[-1..40,-1..40,-1..40,-1..40] of longint; a:array[0..350] of integer; n,m,i,j,k,l,a1,a2,a3,a4:integer;function max(p,q:longint):longint;begin if p>q then max:=p else max:=qend;beg
阅读全文
NOIP2010 机器翻译
摘要:水题,直接模拟即可program translate;var q:array[1..1000] of integer; a:array[1..1000] of boolean; ans,n,m,i,x,head,tail:integer;begin assign(input,'translate.in'); reset(input); assign(output,'translate.out'); rewrite(output); fillchar(a,sizeof(a),false); readln(n,m); ans:=0; head:=1; tail:=0
阅读全文
NOIP2009 靶形数独
摘要:很明显的搜索,针对这道题的数据而言,从右下角搜到左上角会比较快,最后卡时输出,其实这道题写的好像是为数据而写的一样,个人觉得也不太好(虽然是过了)program sudoku;const data:array[1..9,1..9] of integer=((6,6,6,6,6,6,6,6,6), (6,7,7,7,7,7,7,7,6), (6,7,8,8,8,8,8,7,6), (6,7,8,9,9,9,8,7,6), (6,7,8,9,10,9,8,7,6), (6,7,8,9,9,9,8,7,6), (6,7,8,8,8,8,8,7,6), (6,7,7,7,7,7,7,7,6), (6,
阅读全文
NOIP2009 自由贸易
摘要:有点类似于SPFA,设min[i]是从第一个点到第i个点所购入的最小值,再将所有边反向(这样保证先买后卖),max[i]是从第n个点到第i个点所购入的最大值,最后max[i]-min[i]的最大值即是答案program trade;var flag:array[1..100000] of boolean; a,b:array[1..100000,0..200] of longint; v,q,maxv,minv:array[1..100000] of longint; n,m:longint;procedure init;var i,j,x,y,z:longint;begin readln(n
阅读全文
NOIP2009 Hankson的趣味题
摘要:这道题弄了很久,好不容易看懂了题解,是用分解质因数+乘法原理,结果写出来的程序还是超时,程序还是太弱了...先贴上来,以后再重新写过program son;type arr=array[1..500] of longint;var data,a0,a1,b0,b1:arr; x0,y0,x1,y1,n,len,ans,k:longint;procedure first;var i,j:longint;begin len:=2; data[1]:=2; data[2]:=3; for i:=5 to y1 do begin j:=1; while (j<=len) and (i mod d
阅读全文
NOIP2009 潜伏者
摘要:简单模拟题,不过要注意同一个字母加密后的字母是一样的,加密后一样的字母原字母也是一样的。program spy;var a,b:array['A'..'Z'] of char; s1,s2,s:string; i,k,k1:integer; j:char;procedure print;begin writeln('Failed'); close(input); close(output); halt;end;begin assign(input,'spy.in'); reset(input); assign(output,
阅读全文
NOIP2008 双栈排序
摘要:考虑对于任意两个数q1[i]和q1[j]来说,它们不能压入同一个栈中的充要条件是存在一个k,使得i<j<k且q1[k]<q1[i]<q1[j] 我们对所有的数对(i,j)满足1<=i<j<=n,检查是否存在i<j<k满足p1[k]<p1[i]<p1[j].如果存在,那么在点i和点j之间连一条无向边,表示p1[i]和p1[j]不能压入同一个栈,这就是二分图。只要判断这是不是二分图,如果是,模拟输出即可program twostack;var n,i:integer; s:array[1..2,0..1000] of integer
阅读全文
NOIP2008 传纸条
摘要:经典DP,一张纸条从A传给B,另一张从B传给A和两张纸条同时从A传给B是一样的,设f[x1,y1,x2,y2]为第一张纸条到达(x1,y1),第二张纸条到达(x2,y2)时所得的最大值,设x为max(f[x1-1,y1,x2-1,y2],f[x1-1,y1,x2,y2-1],f[x1,y1-1,x2-1,y2],f[x1,y1-1,x2,y2-1])则有:if (x1=0) or (x2=0) or (y1=0) or (y2=0) then f[x1,y1,x2,y2]:=0if (x1=x2) and (y1=y2) then f[x1,y1,x2,y2]:=x+a[x1,y1]if (x
阅读全文
NOIP2008 火柴棒等式
摘要:简单模拟题program matches;const data:array[0..9] of integer=(6,2,5,5,4,5,6,3,7,6);var n,i,m,i1,ans,len,k,j:integer; a,b:array[0..10000] of integer;begin assign(input,'MATCHES.in'); reset(input); assign(output,'MATCHES.out'); rewrite(output); readln(n); if n<13 then begin writeln('0
阅读全文
NOIP2008 苯小猴
摘要:简单题,注意处理0和1的情况program word;var j:char; s:string; min,max,i:integer; a:array['a'..'z'] of integer;function check(k:integer):boolean;var i:integer;begin if (k=1) or (k=0) then exit(false); if k=2 then exit(true); for i:=2 to trunc(sqrt(k))+1 do if k mod i=0 then exit(false); exit(true)
阅读全文
noip2007 树网的核
摘要:找出一条直径,以直径上的每个点为开头或结尾,分别求它的ECC即可可以证明的是,如果图中存在多条路径,则在任何一条直径上都存在一条core(反证法,用到直径的距离最大性)。因此只需讨论一条直径上的core的情况即可。program core;type node=record x,y:integer; end;var ans:longint; n,s:integer; f:array[1..300,1..300] of longint; w:array[1..300,0..300] of integer; d:array[1..300] of longint; a:array[0..300] of
阅读全文
noip2007 矩阵取数游戏
摘要:动态规划: 对于每一行,f(i,j)表示从i到j这一子段单独操作可以达到的最大权值。 有状态转移方程:f(i,j) = 2*max(a(i)+f(i+1,j),a(j)+f(i,j-1)) 边界f(i,i)=2*a(i)程序:program game;type arr=array[0..50] of integer;var f:array[0..80,0..80,0..50] of integer; s:array[1..80,0..50] of integer; i,j,k,n,m:integer; ans:arr;function max(a,b:arr):arr;var k:intege
阅读全文
NOIP2007 字符串的展开
摘要:简单模拟题,小心点即可program expand;var s:string; p,p1,p2,p3:integer;procedure work;var i,j,l,r:integer; s1:string;begin if p1=3 then begin for i:=1 to (ord(s[p+1])-ord(s[p-1])-1)*p2 do write('*'); exit; end; s1:=''; if (s[p-1]>='0') and (s[p-1]<='9') or (p1=1) then begin
阅读全文
NOIP2007 统计数字
摘要:简单题,普通hash即可program count;type node=record num,t:longint; end;var hash:array[1..1000000] of node; a:array[1..10000] of node; n,i,data,p,len:longint; flag:boolean;procedure quick(left,right:longint);var i,j,temp:longint; x:node;begin i:=left; j:=right; temp:=a[(i+j) div 2].num; while i<=j do begin
阅读全文
|
|