I and OI
Past...
摘要: 二叉苹果树(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) 编辑