party lamps(dfs优化+规律枚举)】的更多相关文章

Problem description: To brighten up the gala dinner of the IOI'98 we have a set of N coloured lamps numbered from 1 to N. The lamps are connected to four buttons: button 1 -- when this button is pressed, all the lamps change their state: those that a…
/* 现将相同的合并计数. 再枚举判断是否符合当cou==n*n是符合就退出 */ #include<stdio.h> #include<string.h> #define N 900 int en[N][4],num[N],real[N][4],len,n,ok; void pp(int a[4],int b[4])//赋值 { a[0]=b[0]; a[1]=b[1]; a[2]=b[2]; a[3]=b[3]; } void print(int a[4]) { printf(…
网格里放了一些石块,一个炸弹能炸开其所在的行和列.问炸光石块至少要几个炸弹. 枚举不炸开的行数,则可以得出还要炸开几列. 为了不让复杂度爆炸,需要两个优化. 先是递推预处理出f(i)表示i的二进制位中1的个数,f(i)=f(i-2^k)+1,k是可以推算出来的. 还要DFS枚举不炸开的行数,防止重复访问.(类似容斥的时候的写法) #include<cstdio> #include<algorithm> using namespace std; int n,m,f[1<<…
Generalized Palindromic Number Time Limit: 2 Seconds      Memory Limit: 65536 KB A number that will be the same when it is written forwards or backwards is known as a palindromic number. For example, 1234321 is a palindromic number. We call a number …
http://codeforces.com/contest/793/problem/B 题意:一个地图,有起点和终点还有障碍点,求从起点出发到达终点,经过的路径上转弯次数是否能不超过2. 思路: 直接dfs,但是要优化一下,用vis[x][y][dir]来记录在(x,y)并且方向为dir时的最少转弯数,这样在dfs的时候可以剪掉一些不符合的情况. #include<iostream> #include<algorithm> #include<cstring> #incl…
3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2111  Solved: 986[Submit][Status][Discuss] Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多 多种植了…
给你一张有向图,问你将任意一条边变成双向后,所能得到的最大强连通分量的大小. 缩点之后,预处理can(i,j)表示i能到j. 之后枚举每一条边(u,v),再枚举其他所有点t,如果can(u,t) && can(t,v),则t能和u.v共在一个强连通分量,尝试更新答案. #include<cstdio> #include<algorithm> #include<vector> #include<cstring> using namespace…
[链接]:https://www.luogu.org/problemnew/show/P1618 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”. //感谢黄小U饮品完善题意 输入输出格式 输入格式: 三个数,A B C. 输出格式: 若干行,每行3个数字.按照每行第一个数字升序排列. 输入输出样例 输入样例#1: 复制 1 2 3 输出样例#1: 复制 192 384 576 219…
题目链接: 这个题目非常好,有难度:能够好好的多做做: #include<iostream> #include<string> #include<cstdio> #include<cstring> #include<queue> #include<map> #include<cmath> #include<stack> #include<set> #include<vector> #in…
题意:有n个圆环(n<=15),已知已经扣在一起的圆环,现在需要打开尽量少的圆环,使所有圆环可以组成一条链. 分析:因为不知道要打开哪个环,如果列举所有的可能性,即枚举打开环的所有子集,最多才2^15,即32768. 1.二进制法生成打开环的所有子集 2.枚举每一种子集,环打开后,此环就是孤立的,剩下的环也不与之相连,若剩下的环满足下列所有条件,则这种子集成立,进而最终比较打开环的最少个数. (1)每个环与之相连的环的个数不超过2. (2)剩下的环里没有圈,dfs判圈,连通块涂色. (3)上述处…