随笔分类 - ACM
常见算法
摘要:题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=435题目大意:在一个n*m的方格中可以放入2*1 和 (2*2中缺一个1*1)的方格,求刚好放满的方案数,不能重叠/*** 状态压缩DP, 和POJ 3555题类似,不过稍微复杂一点,...
阅读全文
摘要:/*** 求LCM(1,2,3,...n)**/#include #include #include using namespace std;#define N 100000010unsigned int prime[6000000], p[6000000], T, num;unsigned ...
阅读全文
摘要:这道DP真是没想出来怎么做,不过看了别人的代码后发现也只能这么想了,只有B的状态是可以确定的,然后枚举B,还可以再优化一下,但是数据量不大,就没这个必要了……#include #include #include using namespace std;const int N = 105;vector...
阅读全文
摘要:1 /** 这道题甚是巧妙啊,也是看了别人的代码才A的……,我相信如果你看了以后也会茅塞顿开的 */ 2 #include 3 #include 4 using namespace std; 5 #define N 1005 6 7 int head1, tail1, head2, tail...
阅读全文
摘要:好久没有做题了,开始做这道题时也不知道是咋想的,竟然有链表去实现,弄了好大时候也没弄出来,最后网上看了一下思路,豁然开朗,用数组就可以实现,总体来说这题用的知识有map映射:把输入的x映射为1,2,3...;还有就是树状数组求"check x y"的值,再加上一个flag数组标记x是否在队列里边就O...
阅读全文
摘要://参考了别人的代码,又改进了一下,只用一个数组进行标记,理解了其实也是很简单的……#include #include const int N = 1000005;int c, res, a[N*4][4], flag[N*4][4], len[N*4];void pushDown( int rt ...
阅读全文
摘要:/*** 题目大意为有m人候选人,n个选举人,每个人有两个选择,* 例如(+3, -1) +3表示选第3个人, -1表示不选第一个人,* 要求最终选举出来的结果至少符合每个人的其中一种选择* 很明显是二分图匹配,对于候选人来说,有两种情况,被选中和不被选中* 举个例子,假设一个人选择的是(+3...
阅读全文
摘要:1//dp[i][j][k]表示第i组以字母('a'+j)开头,以字母('a'+k)结尾,最多能组合成多少对2//a[i][j]表示第i组中有哪些字母,a[i][j]为1表示有字母('a'+j);3//c[i]表示第i组中不同字母的个数4//Max[i]表示第i组dp[i][j][k]最大的值5//...
阅读全文
摘要:这两道做时都是超时,无奈之下学习了一下A*算法,其实非常简单,就是加了一个获取当前状态到目的状态的长度(距离),很明显长度小的要排在前边,因此再加上优先队列就形成了一个完美的组合,......AC代码......,还有一个IDA*算法,还要继续学习一下………lightOJ 1139 8 puzzle...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=11801//优先队列+bfs2//wrong1楼梯是每分钟变化一次wrong2奇偶性判断错误3#include4#include5#include6#include7usingnamespacestd;8...
阅读全文
摘要:类型:递推求解代码附下:1//wrong1产生的和有两个相同的2//wrong2visti标记数组标记错误3#include4#include5usingnamespacestd;6intN,nN,sum[10010],num[110];7boolvisit[10010];8boolok(){//n...
阅读全文
摘要:据说是状态压缩DP,我用bfs()做了,其实思想是一样的,下面是我的代码:仅供参考。1//此题可用二进制表示所有的状态,一个进制数的每一位对应一种作业,如果是1表示做这种作业,2//但是还有个先做哪种作业的顺序,此时可以先让每一位都为1为第一种状态,到下一种状态时,3//可以把一个0变为1,表示下来...
阅读全文
摘要:题目意思是有多种物品,每种物品的价值不确定,数量也不确定,很明显就是背包问题,…………//深搜加剪枝 1 //深搜代码: 2 #include 3 #include 4 using namespace std; 5 int v[55], m[55], h[53], N, B, res; 6 bo...
阅读全文
摘要:将模板串s倒置,并尾加到原串后,求得next[]数组,根据next[]数组的性质,便可得前缀的回文串,同理交原串尾加到倒置串后,便可求得后缀的回文串,然后前缀串和后缀串分开,遍历即可求得最大值! 1 #include 2 #include 3 #include 4 #include 5 us...
阅读全文
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 char W[10005], T[1000005]; 6 int next[10005]; 7 void getfail(char *w, int len){ //失配,求得...
阅读全文
摘要:1 #include 2 #include 3 using namespace std; 4 int dp[2][1= (1= (1<<n)) break;28 if(!(st[i] & st[j])) //上一行与本行匹配的最大值29 ...
阅读全文
摘要://题目链接 //http://acm.nyist.net/JudgeOnline/problem.php?pid=634 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int a[100001],...
阅读全文
摘要://题目链接: //http://poj.org/problem?id=2676 //http://www.lightoj.com/volume_showproblem.php?problem=1397 1 #include 2 #include 3 #include 4 #i...
阅读全文
摘要:题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=117 1 #include 2 #include 3 using namespace std; 4 5 int a[1000001], b[1000001]; 6 long lo...
阅读全文
摘要:题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=119 1 #include 2 #include 3 #include 4 using namespace std; 5 #define maxn 100001 6 7 int ...
阅读全文