I and OI
Past...
摘要: 访问艺术馆 gallery.pas/c/cpp【问题描述】 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动。艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向一个展览室。Peer知道每个展室里藏画的数量,并且他精确测量了通过每条走廊的时间。由于经验老到,他拿下一幅画需要5秒的时间。你的任务是编一个程序,计算在警察赶来前,他最多能偷到多少幅画。 【输入格式】 第1行是警察赶到的时间,以秒为单位。第2行描述了艺术馆的结构,是一串非负整数,成对地出现:每一对的第一个数是走过一条走廊的时间,第2个数是它末端的藏画数量:如果第2个数是0那么说明这条走廊分叉为两 阅读全文
posted @ 2011-08-06 21:14 exponent 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 没有上司的晚会(Ural) party.pas/c/cpp 【问题描述】 有个公司要举行一场晚会。 为了能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会邀请他的上司(上司的上司,上司的上司的上司……都可以邀请)。 每个参加晚会的人都能为晚会增添一些气氛值,求一个邀请方案,使气氛值的和最大。 【输入格式】 第 1 行一个整数 N(1<=N<=6000)表示公司的人数。 接下来 N 行每行一个整数。第 i 行的数表示第 i 个人的气氛值 x(-128<=x<=127)。 接下来每行两个整数 L,K。表示第 K 个人是第 L 个人的上司。 输入以 0 0 结束。 【输 阅读全文
posted @ 2011-08-06 16:33 exponent 阅读(700) 评论(0) 推荐(0) 编辑
摘要: 战略游戏(SGOI) stragedi.pas/c/cpp 【问题描述】 Bob 喜欢玩电脑游戏,特别是战略游戏。但是他经常无法找到快速玩过游戏的办法。现在他有个问题。他要建立一个古城堡,城堡中的路形成一棵树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路。注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到。 请你编一程序,给定一树,帮 Bob 计算出他需要放置最少的士兵。 【输入格式】 输入文件中数据表示一棵树,描述如下: 第一行 N,表示树中结点的数目。 第二行至第 N+1 行,每行描述每个结点信息,依次为:该结点标号 i,k(后面有 k 条边与结点 阅读全文
posted @ 2011-08-06 16:13 exponent 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 二叉苹果树(Ural) apple.pas/c/cpp 【问题描述】 有一棵苹果树,如果树枝有分叉,一定是分 2叉(就是说没有只有 1个儿子的结点)。这棵树共有 N 个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是 1。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 4 个树枝的树。 2 5 \ / 3 4 \ / 1 现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数量,求出最多能留住多少苹果。 【输入格式】 第 1 行 2 个数,N 和 Q(1<=Q<= N,1<N<=100)。 N 表示树的结点数,Q 表 阅读全文
posted @ 2011-08-06 15:47 exponent 阅读(1620) 评论(0) 推荐(0) 编辑
摘要: 技能树(SGOI) skill.pas/c/cpp 【问题描述】 玩过 Diablo 的人对技能树一定是很熟悉的。一颗技能树的每个结点都是一项技能,要学会这项技能则需要耗费一定的技能点数。只有在学会了某一项技能以后,才能继续学习它的后继技能。每项技能又有着不同的级别,级别越高效果越好,而技能的升级也是需要耗费技能点数的。 有个玩家积攒了一定的技能点数,他想尽可能地利用这些技能点数来达到最好的效果,因此他给所有技能的所有级别都打上了分,他认为效果越好的则分数越高。现在他要你帮忙寻找一个分配技能点数的方案,使得分数总和最高。 【输入格式】 第一行是一个整数 n(1<=n<=20),表示 阅读全文
posted @ 2011-08-06 15:19 exponent 阅读(665) 评论(0) 推荐(0) 编辑
摘要: 扩展问题中比较常见的就是求方案数和求第K优解.求方案数的问题中,一般是求将背包装满的方案数(求最优方案数不多见).代码很简单:var f:array[0..10000] of longint; v:array[0..100] of longint; n,m,i,j:longint;begin readln(n,m); for i:=1 to n do readln(v[i]); f[0]:=1; for i:=1 to n do for j:=v[i] to m do inc(f[j],f[j-v[i]]); writeln(f[m]);end.note:对于a1X1+a2X2+a3X3+.. 阅读全文
posted @ 2011-08-06 09:54 exponent 阅读(450) 评论(0) 推荐(0) 编辑