北大POJ解题报告,全是我亲手所写,仅供与所有ACMer交流分享,未经允许请勿擅自用于个人盈利用途(包括网络虚拟积分、虚拟币、实际货币交易等在内的一切商业行为)
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1300454092和POJ3176一模一样,不懂做这题的去看看我对3176的解释这是地址http://blog.csdn.net/lyy289065406/article/details/6648150不骗人,确实是一模一样的代码O(∩_∩)O哈哈~ 1 //Memory Time 2 //232K 0MS 3 4 #include<iostream> 5 using namespace std; 6 7 int max(int a,int b) 8 { 9 return a&
阅读全文
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1300453935大致题意:输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线。规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个数中的一个。解题方法:用二维数组way[][]靠左存储三角形内的数据,那么连线规则变更为way[i][j] → Way[i+1][j]或 Way[i][j] → Way[i+1][j+1]注意:way[][]初始化为输入时的三角形数值,此时way[i][j]表示该点位置上的权值,没输入的位置初始化为0。解题思路:
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1300023619提示:动态规划,求LIS最大不下降子序列O(n^2)和O(n*logn)算法都能完美AC不懂的就去看看LIS的概念就会做了我把两种算法都贴出来: 1 //Memory Time 2 //228K 16MS 3 4 //O(n^2)算法 5 #include<iostream> 6 using namespace std; 7 8 int main(int i,int j) 9 {10 int n;11 while(cin>>n)12 {13 in
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1300164274大致题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。【规定买任一类的珍珠n个(价格为p),都要支付(n+10)*p的钱,即额外支付10*p】例如样例Input的第二个例子:31 101 11100 12需要买第一类1个,第二类1个,第三类100个按常规支付为 (1+10)*10 + (1+10)*11 + (100+10)*12 = 1551元(一共买了102个珍珠)但是如果全部都按照第三类珍珠的价格支付,同样是买102
阅读全文
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1300076744解题思路:是POJ2533的扩展题。题意不难,令到原队列的最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。就是使新队列呈三角形分布就对了。但这里有一个陷阱,看了一些别人的解题报告说“任一士兵旁边不能存在等高的士兵”,然后又举了一个例子说注意35 5 5 的情况,我没看他们的程序,不知道他们是不是把这些例子特殊处理了,但完全没必要,因为“允许处于三角形顶部的两个士兵等高”,图形化就是如下图:其实蓝色士兵的身高和红色士兵的身高是完全没有关系的。要求最少出
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299653270解题思路动态规划题意就是给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列。PS:是匹配单词序列,而不是一个单词不多说,看程序主要是知道状态方程的含义dp[i]表示从message中第i个字符开始,到第L个字符(结尾处)这段区间所删除的字符数,初始化为dp[L]=0由于我的程序是从message尾部向头部检索匹配,所以是下面的状态方程:从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况,只有可以匹配单词时才进入第二条方程进行状态
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299341477提示:动态规划,多重背包题目大意:有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些货币可以凑成的最接近且小于等于给定的数字cash的金额。初始思路:多重背包问题,第i种面额d[i]有 n[i]+1种选择方案可以转化为01背包问题处理转化的大概思路就是把 每种面值乘以其不同的个数,把得到的不同金额作为一件新的独一无二的货币,但是这样存在两个问题,一是 d[i]*ki 可能等于 d[j]*kj ,其中ki ∈n[i],kj∈n[j],二是这样做一定TLE超时
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299341345提示:动态规划,01背包初看此题第一个冲动就是穷举。。。。不过再细想肯定行不通= =O(20^20)等着超时吧。。。我也是看了前辈的意见才联想到01背包,用动态规划来解题目大意:有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。其中可以把天枰看做一个以x轴0点作为平衡点的横轴输入:2 4 //C 钩子数 与 G钩码数-2 3 //负数:左边的钩子距离天平中央的距离;正数:右边的钩子距离天平中央的距离c[k]
阅读全文
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1303954302题目翻译:当一个广播电台在一个非常大的地区,广播站会用中继器来转播信号以使得每一个接收器都能接收到一个强烈的信号。然而,每个中继器必须慎重选择使用,使相邻的中继器不互相干扰。如果相邻的中继器使用不同的频道,那么就不会相互干扰。由于无线电频道是一有限的,一个给定的网络所需的中继频道数目应减至最低。编写一个程序,读取一个中继网络,然后求出需要的最低的不同频道数。建模:一个有N个节点的无向图,要求对每个节点进行染色,使得相邻两个节点颜色都不同,问最少需要多少种颜色?那么题目就变
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1303713313大致题意:九宫格问题,也有人叫数独问题把一个9行9列的网格,再细分为9个3*3的子网格,要求每行、每列、每个子网格内都只能使用一次1~9中的一个数字,即每行、每列、每个子网格内都不允许出现相同的数字。0是待填位置,其他均为已填入的数字。要求填完九宫格并输出(如果有多种结果,则只需输出其中一种)如果给定的九宫格无法按要求填出来,则输出原来所输入的未填的九宫格解题思路:DFS试探,失败则回溯用三个数组进行标记每行、每列、每个子网格已用的数字,用于剪枝bool row[10]
阅读全文
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1304031265题目翻译:公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43 (= 1 + 2 + 34 + 6) 是所有可能中最接近而不超过50的。(比如1, 23, 4, 和6 就不可以,因为它们的和不如43接近50,而12, 34, 6也不可以,因为它们的和超过50了。碎纸还有以下三个要求:1、如果target的
阅读全文
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1311647833大致题意:2011 POJ暑假集训题Problem E,POJ上有中文版解题思路:DFS+剪枝POJ2362的强化版,重点在于剪枝令InitLen为所求的最短原始棒长,maxlen为给定的棒子堆中最长的棒子,sumlen为这堆棒子的长度之和,那么InitLen必定在范围[maxlen,sumlen]中根据棒子的灵活度(棒子越长,灵活度越低) DFS前先对所有棒子降序排序剪枝:1、 由于所有原始棒子等长,那么必有sumlen%Initlen==0;2、 若能在[maxlen
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1311605012大致题意:给定一堆不定长度的小棒子,问他们能否构成一个正方形。解题思路:POJ1011的热身题,DFS+剪枝本题大致做法就是对所有小棒子长度求和sum,sum就是正方形的周长,sum/4就是边长side。问题就转变为:这堆小棒子能否刚好组合成为4根长度均为side的大棒子不难了解,小棒子的长度越长,其灵活性越差。例如长度为5的一根棒子的组合方式要比5根长度为1的棒子的组合方式少,这就是灵活性的体现。由此,我们首先要对这堆小棒子降序排序,从最长的棒子开始进行DFS剪枝,有
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1311305814大致题意:题意比较难懂。大致如下:第一行数字是邮票的面值,每一个数字就是一个不同的种类,哪怕面值相同。以0结束。第二行数字是顾客所需要的邮票总面值。每个数字就是一个顾客的需求,以0结束。每两行是一组case。以EOF结束输入。顾客是集邮爱好者,所以你必须尽可能的给他不同种类的邮票。但是一位顾客最多只能拿4张邮票。显然,我们拥有的邮票就是第一行中的数据。解题思路:DFS寻找所有的解,再逐一比较寻找最优解,剪枝是关键。关于tie。满足顾客需求的解就是可行解。邮票种类最多的可
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1303446571题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径移动方向可以是上,下,左,右,前,后,六个方向每移动一次就耗费一分钟,要求输出最快的走出时间。不同L层的地图,相同RC坐标处是连通的解题思路:我越看这题就越觉得是 XX地下城 = =水题一道,求最短路问题,直接BFS得了开三维数组,每次搜索方向由二维的4个方向增加到6个,但是方法还是那个方法没难度注意若果三维数组恰好开到极限的30*30*30是会RE的,别替人家电
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1303732259题目大意:给出了两个瓶子的容量A,B, 以及一个目标水量C,对A、B可以有如下操作:FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap;DROP(i) empty the pot i to the drain;POUR(i,j) pour from pot i to pot j; after this operation either the pot j is full (and there may be some water
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1303623014大致题意:给定两个四位素数a b,要求把a变换到b变换的过程要保证 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位不同,而且每步得到的素数都不能重复。求从a到b最少需要的变换次数。无法变换则输出Impossible解题思路:超级水题,40入口的BFS + 素数判定不过剪枝之后就没有40入口了,入口数远小于40无论是判定素数还是搜索素数,首先排除偶数,这样就剪掉一半枝叶了判断素数用根号法判断,如果一个数X不能被 [2,
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1303946967大致题意:给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。解题思路:首先暴力枚举肯定是不可能的 1000ms 想不超时都难,而且枚举还要解决大数问题。。要不是人家把这题放到搜索,怎么也想不到用BFS。。。解题方法: BFS+同余模定理不说废话。首先说说朴素的不剪枝搜索方法:我以n=6为例首先十进制数,开头第一个数字(最高位)一定不能为0,即最高位必为1设6的 ”
阅读全文
摘要:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1303558739大致题意:给定两个整数n和k通过 n+1或n-1 或n*2 这3种操作,使得n==k输出最少的操作次数解题思路:说实话,要不是人家把这题归类到BFS,我怎么也想不到用广搜的= = 自卑ing。。。水题水题,三入口的BFS注意的地方有二:1、 由于用于广搜的 队列数组 和 标记数组 相当大,如果定义这两个数组时把它们扔到局部去,编译是可以的,但肯定执行不了,提交就等RE吧= =大数组必须开为 全局 。。。常识常识。。。2、 剪枝。直接广搜一样等着RE吧= = 不剪枝的同学
阅读全文
摘要:大致题意:中文题。。我没什么好说的解题思路:DFS,没想法就很难很难,有想法就很容易的题棋盘规则与否不是难点,无论规则不规则都可以用标记去解决难点在于 棋盘的行数(列数)n 与 待摆放的棋子总数k 的关系为k<=nK==n时还是比较好办的K<n时就让人有点迷糊不知怎样处理了网上普遍做法都是 逐行深搜,效率不错,我也稍微借鉴了,具体看程序,不多说了,搜索的题抽象性太强,文字很难说清楚 1 //Memory Time 2 //184K 32MS 3 4 #include<iostream> 5 using namespace std; 6 7 bool chess[9][9
阅读全文