
ural 解题报告
heartnheart
这个作者很懒,什么都没留下…
展开
-
Ural 1033
<br />题意:求游客进入迷宫能看到的墙的面积<br /><br />WA点:注意两个入口可能不连通,所以两边都要搜索<br /> <br />代码:<br /> <br />//============================================================================// Name : Test.cpp// Author :// Version :// Copyright : Your原创 2010-12-01 16:21:00 · 591 阅读 · 0 评论 -
Ural 1225
<br />题意:由红白蓝按照规则形成的旗帜的种类数<br /> <br />WA点:注意longl long<br /> <br />方法:找了规律才发现,设f[i]表示i段能形成的旗帜的种类数<br /> <br />则f[i] = f[i-1] + f[i -2] ,因为,在f[i-1]后面加一种颜色(红或白)或者在f[i-1]中加上包括蓝的两种颜色即可形成f[i]<br /> <br />代码就不附了原创 2010-12-01 16:26:00 · 638 阅读 · 0 评论 -
Ural 1353
<br />啥也不说了,丢人!<br />#include <iostream>using namespace std;int f[10][82];//f[i][j] = E(f[i-1][j-k]) (0 <= k <= j)int main(){ int s; cin >> s; if(s == 1) { cout << 10 << endl; return 0; } f[0][0] =原创 2010-12-08 09:51:00 · 517 阅读 · 0 评论 -
Ural 1017
题意:N个砖块按照严格递增到顺序建造楼梯,且楼梯阶数至少为2,求有多少种方法WA:根本就想不到状态转移方程。。。方法:这是我们戒dota生涯的第一个题目,也彻底证明了咱到DP水平是何其之低。。。刚刚拿过来到时候没有任何思路,如果只是记录i个方块对应的方法数的话,是无法由i-1推至i的,因为这样无法限定条件。后来学习了大牛们到思想,才AC了。。 最朴素的思路是n^3的,令f[i][j]表示i个砖块高度为j可形成到方法数,则可以知道 f[i][j] = Σf[i-j][k] 其中(0 代码:原创 2010-11-22 21:05:00 · 1291 阅读 · 1 评论 -
Ural 1081
题意:对于原有到二进制序列,规定连续两位为1的形式不合法,剩下的按字典序排列,如000合法但011不合法101合法。输入位数N和第几个数K输出其二进制形式,若无则输出-1方法:貌似以前做过类似的题,但是本题最终还是在别人到思路下A掉。。 DP关键在于找到状态转移方程,而找方程关键在于找状态。我们从限制条件开始构造原创 2010-11-24 13:18:00 · 718 阅读 · 0 评论 -
Ural 1029
<br />题意:从大楼的一层任意一间房间开始,从大楼的的顶层任意一间房间出来。<br />方法:网上都说是双重DP,在Crash了N多次以后,终于在晓东的一组数据下A了。。这组数据的检查不仅让我发现了数组越界的原因(dp[M]写成了DP[N]..),更让我明白了什么是双重DP,我原来以为就是DP两次,现在看来与for循环嵌套一般,DP中套DP。。。<br />代码:<br /> <br />#include <iostream>using namespace std;int data[120][5原创 2010-11-25 15:38:00 · 604 阅读 · 0 评论 -
Ural 1018
<br />题意:一颗二叉苹果树树上结苹果,要求剪掉几棵枝,然后求保留Q根树枝能保留的最多到苹果数。<br />方法:典型的树形DP,第一次做,看不出来。。。。晓东有一种邻接表的常数优化方法以及免建树方法,但我还是觉得建树后思路更加清晰。<br /> 还是老问题,寻找状态。这次的状态是ans[i][j]表示以i为树根,j条边能采摘的最大苹果数。与此同时,因为所有的苹果都结在边上,但是我们可以将之平移到叶子方向的节点上,这样根节点root就要假设有一条虚拟边接在其上,且其苹果数为0.这样不难原创 2010-11-24 21:33:00 · 1619 阅读 · 0 评论 -
Ural 1031
题意:在一条铁路上有N个火车站,只有三种票,求两个车站之间的最少花费方法:一开始以为是一道简单题,很NC的开了一个二位数组,很可惜,MLE了,而且中间还很SB的想到了用记忆化搜索可能比构建更快一些。。。 经过大牛们的悉心指导,原来用一维就可以搞定 转移方程为f[j] = min(f[i] + GetCost(i,j)) (start 代码: O(n^2)#include #include #include #include using namespace std;#d原创 2010-11-25 21:50:00 · 545 阅读 · 0 评论