创新实验室周训题
文章平均质量分 77
WA是一笔财富
这个作者很懒,什么都没留下…
展开
-
Max Sum(第一周J题)
DescriptionGiven a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 1转载 2016-09-21 16:37:05 · 360 阅读 · 0 评论 -
Poj 1014简单dfs
传送门:POJ1014题意:给你1-6六个数,分别有不一定的数量,问你能不能凑成和相等的两部分。其实这个题真的很水啊,真的真的很水啊,可是月赛的时候愣是让三个人TLE的一晚上,想尽办法剪枝,又剪成了WA。。最后赛完发现是回溯的问题。。。这题根本不用回溯。。带上回溯必定超时,不回溯的原因是:dfs的时候已经保证了每次加入一个新数时不能超过sum/2,所以只需要一口气搜到底就好了,如果这次拼不原创 2016-11-02 17:00:33 · 276 阅读 · 0 评论 -
POJ2688Cleaning Robot bfs+dfs
传送门:poj2688题意:从求从给定点出发,遍历所有标记出来的点的最短路。这题思维很巧妙啊,因为有多个标记点,所以先用bfs求出任意两个标记点以及起始点和任意标记点之间的最短路径,这样就变成了变种的TSP(旅行商)问题,即求遍历所有点的最短路,这时再用dfs求解就行了。#include #include #include #include #include using name原创 2016-11-02 17:29:07 · 230 阅读 · 0 评论 -
POJ2531 Network Saboteur dfs
传送门:POJ2531题意:有几台电脑,每两台电脑之间有固定的流量,要求将这些电脑分成两部分,使这两部分之间的流量总和最大。解法:dfs搜索其中一堆,如果将第i台电脑加进去能将两部分之间的流量变大的话,就将这一台标记出来加入这一堆,并更新流量最大值,否则就放入另一堆。#include #include #include using namespace std;int map[2原创 2016-11-02 18:53:10 · 214 阅读 · 0 评论 -
HDU4198 Quick out of the Harbour bfs+优先队列
传送门:HDU4198题意:找出口,图中有@点要消耗额外时间,问出去的最短时间。典型且简单广搜+优先队列,全当练习一下优先队列吧。#include#include#include#include#define M 505using namespace std;int n,m,d;char map[M][M];int book[M][M];int go[4][2]={0原创 2016-11-02 19:22:15 · 204 阅读 · 0 评论 -
HDU2209+POJ3279 枚举+dfs
传送门:HDU2209传送门:POJ3279说实话真不知道这两个题算不算搜索,只说枚举也不为过。因为核心思想就是枚举,然后剩下的部分就是检查了。先说比较简单的HDU2209,下面给的链接讲解的挺明白的 点击打开链接 注意上一张的状态决定下一张是否翻转就好了,其他还比较好理解。#include #include #include using namespace std;原创 2016-11-02 19:43:05 · 349 阅读 · 0 评论 -
codeforces 731c Socks 并查集
A - SocksTime Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64uSubmit StatusDescriptionArseniy is already grown-up and independent. His mother decided to l原创 2016-11-16 22:53:11 · 350 阅读 · 0 评论 -
POJ 3279 Fliptile 开关问题
传送门:POJ3279题意:牛翻地,每翻动一块地其上下左右的四块地也会跟着翻转,问最怎样用最少的步数把地都翻成正面向上。(1代表反面,0代表正面)并且输出要是字典序最小。思路:典型开关问题,不过是二维的,建议先做POJ3276的一维开关问题,至于开关问题的理论推导,特别推荐看挑战程序设计P150-P157,尤其是最后的集合整数的讲解表示个人感觉极为精妙。然后就题论题,本题主要思路就是先原创 2017-01-23 15:00:16 · 290 阅读 · 0 评论 -
poj1011 sticks
传送门:poj1011题意:给你一些长度不同的棍子,让你把他们拼成长度相同的新棍子,问最小长度是多少枚举所有可能长度,dfs并不难写,重点是剪枝,将棍子长度按从大到小排序后从前往后dfs,这里有一点是如果把一个棍子当要组成的新棍子的第一根都无法组合成功,那么放在后面更不可能和其他棍子组成想要的长度了,可以这样考虑:如果这个棍子在后面那么多棍子都还没用的情况下都和它们组成不了想要的长度,等到原创 2016-10-21 20:07:45 · 427 阅读 · 0 评论 -
棋盘问题(poj1321)dfs
传送门:poj1321。因为k个棋子不同行不同列,假设每个棋子都有编号1,2,3....可以推知,假设当前行c已摆放棋子,则从当前行往下,1号棋子可以放置的行有c到n-(k-1)+1,2号棋子放置的行有c到n-(k-2)+1......摆放了t个棋子以后下一个棋子可以摆放的行为c到n-(k-t)+1,需要注意的是可以摆放的行不是一定能摆放,还要看这一行里有没有#所在的列没有被标记出来,然后df原创 2016-10-15 19:53:47 · 235 阅读 · 0 评论 -
poj2676 sudoku dfs
传送门:poj2676题意就是解数独呗。。解题的关键在于book数组,一开始我的book[i][j][k]是用来记录i,j点上可不可以用k这个数字,然后dfs的时候每在i,j点填入一个值k,就将第i行第j列和i,j所在的小九宫格中所有的节点对应的标记数组更新(即把k标记为不可用),但是这样在回溯过程中会有一个巨大的并且基本无法弥补的bug,就是一开始大九宫格中就有固定的数,因此有些位置在d原创 2016-10-21 18:23:17 · 303 阅读 · 0 评论 -
Pseudoprime numbers(poj3641)快速幂
传送门:poj3641大致题意就是给你两个数a和p,让你判断a是不是素数(素性判断)以及a的p次方模p是不是等于a,这里p的范围较大所以要用快速幂。快速幂基本思想:将指数化为二进制,一开始定义一个变量x等于底数,从第一位开始二进制每前进一位就将x平方一次,二进制位若为一就将对应的x乘到结果当中去,假设a为底数,指数为5,即二进制101,a^5=1*a^1*1*a^4。由于结果特别大,一原创 2016-09-27 20:39:56 · 284 阅读 · 0 评论 -
阿牛的EOF牛肉串(第一周I题)
Description今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做EOF的队伍,由04级的阿牛、XC以及05级的COY组成。在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做点什么来纪念这段激情燃烧的岁月,想了一想,阿牛从家里拿来了一块上等的牛肉干,准备在上面刻下一个长度为n的只由"E" "O" "F"三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能有其他原创 2016-09-21 16:16:59 · 1064 阅读 · 0 评论 -
hide handkerchief(第一周f题)辗转相除
DescriptionThe Children’s Day has passed for some days .Has you remembered something happened at your childhood? I remembered I often played a game called hide handkerchief with my friends. Now原创 2016-09-21 15:56:00 · 416 阅读 · 0 评论 -
大明A+B(第一周c题)大数相加
此题不是简单地大数相加,而是求两个长小数的和,所以第一点是要找到小数点,将小数点对齐再相加,这里我是将两个数分别倒序存到两个数组里,小数点的位置就是数组的中间,加的时候注意进位。输出的时候要注意是倒序输出,还要去前导零和后导零,这里有个坑点就是0.1+0.1结果为.2而不是0.2。最后就是注意结果为整数的话不要输出小数点。另一种方法是读入两个数以后将它们的整数部分和小数部分分开,再分别相加,最原创 2016-09-21 15:11:15 · 584 阅读 · 0 评论 -
hdu 2181哈密顿绕行世界问题 dfs
传送门:hdu 2181中文题就不多说了,唯一值得注意的一点是dfs到最后cnt==20的时候要先判断最后一个城市和第一个城市连不连通再输出。#include #include #include int map[22][22];int book[22];int line[22];int t=0,m;using namespace std;int dfs(int cnt){原创 2016-10-21 16:58:37 · 339 阅读 · 0 评论 -
hdu1010 Tempter of the Bone(dfs)
传送门:hdu1010因为是在规定的时间点到达目的地所以必须用深搜。。自己写的深搜用尽浑身剪枝方法才勉强压线950ms过。。搜一发题解才发现对于这种确定时间到达的有一种很奇妙的剪枝方法,奇偶剪枝。。我就直接转了吧。。奇偶剪枝详解附上我自己写的代码#include #include #include #include int n,m,T,flag=0;int sc,sr转载 2016-10-21 20:50:34 · 199 阅读 · 0 评论 -
hdu1175 连连看dfs
传送门:hdu1175其实这个题深搜广搜都可以,但是广搜本来就用的不熟练,再加上还只能转两次弯,根本就不知道该怎么写入队条件,于是果断选择了深搜。。这里有一个重要剪枝是当转弯次数为2的时候先不要进行下一次dfs,直接判断目标点在不在前进方向中就行了,不剪的话铁定超时。。#include #include #include int n,m,x1,x2,y1,y2,flag=0;int原创 2016-10-21 21:10:49 · 813 阅读 · 1 评论 -
poj1190 生日蛋糕 dfs
传送门:poj1190由于高度和半径都是整数因此可以用bfs来做,关键是如何剪枝。由于蛋糕是一层层摞上去的,而最底层下底面面积又不算,因此所有底面积的和就相当于一个底面积,即最下面那一层的上底面的面积,剩余部分就都是侧面积了。经过以上分析,假设最上面一层为第一层,由于下面的蛋糕要比上面的大,因此每一层的最小面积(不考虑底面积)就成了h和r都取i(i为第几层)的时候,即第i层的最小面积为2*原创 2016-10-21 19:01:33 · 317 阅读 · 0 评论 -
hdu 2102 A计划bfs
传送门:hdu2102题意中能够在T时刻找到公主就是T时刻以内找到公主,因为打不了你可以在一个格子里多呆几秒嘛。。典型广搜,book数组和入队条件稍微改动一下即可。#include #include #include #include using namespace std;int n,m,T;int ef,er,ec;int go[4][2]={0,1,1,0,0,-1,-原创 2016-10-21 18:12:34 · 248 阅读 · 0 评论 -
HDU 5113 Black And White dfs
传送门:HDU5113本以为这么小的数据量可以不用剪枝,然而事实证明我还是多想了。。关键剪枝为:当某种颜色的剩余数量大于剩余格子数的一半时,直接返回,因为这种情况继续搜下去无论怎么涂色必定有两个相邻的同色,请自行证明。。#include #include #include #include using namespace std;int time[30];int n,m,k原创 2016-11-02 20:35:24 · 254 阅读 · 0 评论