随笔分类 - 搜索
摘要:题意就是有个4*4的棋盘,上面有黑白两面的棋子,然后你可以选一个点,翻转这个点及他上下左右的棋子(如果有的话),求最小步数可以翻成全白或全黑,如果无法成功输出impossible。 如果是最少步数的话应该用到广搜,因为一个棋子只有正反两面,所以可以用二进制的形式存储棋盘的状态,参考了某大牛的代码,没有明显的用到DFS,但和DFS的效果是一样的,而且这样也使得代码变短了好多。//poj 1753//2013-10-16-21.35#include int ans;int cnt;void search(int x, int sta, int cnt){ if (sta == 65535...
阅读全文
摘要:题意: 在一个正常的点可以净化该行该列的所有细胞,判断是否可以净化所有的细胞,并且输出所选的点。思路: 如果可以的话,一定会选n个点。 先判断每一行是否有正常细胞,然后判断每一列是否有,如果都没有肯定不能净化,然后输出每一行或者每一列的第一个正常细胞的位置就好。#include #include #include using namespace std;int n ;char map[110][110];int main(){ cin>>n; int i , x[110] , y[110] , j; memset(x , 0 , sizeof(x)); m...
阅读全文
摘要:题意: 如果某一行没有草莓,就可以吃掉这一行,某一列没有也可以吃点这一列,求最多会被吃掉多少块蛋糕。//cf 192 div2#include #include int vis[11][11];char map[11][11];int main(){ int r, c; while (scanf("%d %d", &r, &c) != EOF) { for (int i = 1; i <= r; i++) scanf("%s", &map[i][1]); memset(vis, 0, sizeof (vis)); ...
阅读全文
摘要:题目链接 大概题意是有n个男的n个女的(原谅我这么说,我是粗人),给你一个n*n的矩阵,第i行第j列表示第i个女(男)对第j个男(女)的好感度,然后要安排n对相亲,保证都是正常的(无搞基百合之类的),然后求怎么安排能使好感度和最大,求出最大值。 开始试了纯暴力的方法,时间复杂度是n!果断超时#include #include #include using namespace std;int vis[17];int n, ans, sum;int map[19][19];void dfs(int x){ if (x == n+1) { ans = max(ans, ...
阅读全文
摘要:题目链接有n首歌,编号从1到n,每首歌播放时间为t,播放次数为c,n首歌按次序播放,有m个询问,输出第v分钟正在播放的歌曲编号。很简单的二分查找,直接贴代码。//2013-05-23-20.26#include #include using namespace std;const int maxn = 100005;int sum[maxn];int binary_search(int l, int r, int v){ int mid = (l+r)>>1; if (l == r) return l; if (v > sum[mid]) retu...
阅读全文
摘要:题目链接大致题意:有n跟棍, 求它们能组成最短且长度相同的棍的长度解题思路:DFS+剪枝POJ2362的强化版,重点在于剪枝 建议你先看看这道题 here令initlen为所求的最短原始棒长,maxlen为给定的棒子堆中最长的棒子,sumlen为这堆棒子的长度之和,那么initlen必定在范围[maxlen,sumlen]中,cnt为可能组成的数目,也就是sunlen/maxlen。根据棒子的灵活度(棒子越长,灵活度越低) DFS前先对所有棒子降序排序剪枝:1、 由于所有原始棒子等长,那么必有sumlen%Initlen==0,这个我在main函数中做了。2、 若能在[maxlen,suml.
阅读全文
摘要:题目链接大致题意:给定一堆不定长度的小棒子,问他们能否构成一个正方形。解题思路:POJ1011的热身题,DFS+剪枝本题大致做法就是对所有小棒子长度求和sum,sum就是正方形的周长,sum/4就是边长side。问题就转变为:这堆小棒子能否刚好组合成为4根长度均为side的大棒子不难了解,小棒子的长度越长,其灵活性越差。例如长度为5的一根棒子的组合方式要比5根长度为1的棒子的组合方式少,这就是灵活性的体现。由此,我们首先要对这堆小棒子降序排序,从最长的棒子开始进行DFS剪枝,有3处可剪:1、 要组合为正方形,必须满足sum%4==0;2、 所有小棒子中最长的一根,必须满足Max_length
阅读全文
摘要:题目链接题意 有个小球,只能向右边或下边滚动,而且它下一步滚动的步数是它在当前点上的数字,如果是0表示进入一个死胡同。求它从左上角到右下角到路径数目。注意, 题目给了提示了,要用64位的整数。记忆化搜索方法#include #include #define ll __int64int n;ll vis[36][36];char board[36][36];ll dfs(int x,int y){ if(x==n-1&&y==n-1) return 1; if(board[x][y]=='0') return 0; if(vis[x][y]) ...
阅读全文
摘要:题目链接Problem DescriptionFatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 #include #include using namespace std;int n, k, dp[101][101];int map[101][101];int dfs(int a,int b){ if(dp[a][b]) return dp[a]...
阅读全文
摘要:DFS(Depth First Search )一般是不用hash的,所以很多时候称之为”暴力”,也就是穷举所有情况,一般看几个我们OJ的dfs的版本的题目就可以模仿着做了,因为牵涉到递归,初学者学的时候最好能举一反三,理解其中真谛.DFS --- EASY(15)Tempter of theBoneSafecrackerPrime RingProblemRobot MotionFire Net猜数字 此题暴力仅需15msOil DepositsSum It UpRed and BlackShreddingCompanyKrypton FactorRankHow ManyEquations C
阅读全文