- 博客(15)
- 收藏
- 关注
原创 poj 1753 bfs+位运算
接上一篇本题dfs 耗时2天写出来的第一个位运算。 唯一记住一件事:网上推荐poj刷题水题请千万不要相信它水。 传送poj 1753因为每个棋子只有黑白2种颜色可以用0,1两个数字来表示,这样用16个0或者1,就可以表示出来当前期盼的状态。然后使用异或操作将需要翻的棋子翻过来。推荐一篇博客哦,讲的很详细,而且写的不太一样 戳直接上代码#include<cstdio> #include<i
2016-03-24 23:45:45 297
原创 poj 1753 Flip Game
【深夜写题解之人【如有脑子不清,尽请见谅哈哈哈传送大致题意: 给你一个4*4的棋盘,给你白黑棋子的初始状态,一次操作就会翻这颗棋子上下左右的4颗,问你几步可以把它们翻成一种颜色。然后tle一次,impossible输出加了个句号wa一两。暴力枚举dfs搜索 297ms过得。。就是暴力。。看代码的解释了。 ps discuss区又说可以bfs+位运算,不会,待研究; pps 还说可以高斯消元【-
2016-03-21 00:42:03 392 3
原创 poj 1146 ID Codes
ps 容朕吐槽一句: 每写一道题要是能查一遍生词,英语估计都不用愁了【没错说你呢poj这是一道排列的题–隶属algorithm库里的 next_permutation。引自cpluplus的example// next_permutation example #include <iostream> // std::cout #include <algorithm> // std::
2016-03-20 16:04:35 511
原创 poj 1182 食物链
经典经典并查集!!!!强烈建议自己写一遍,真是。。其实重点就是偏移量的更新。ps可以用向量解。传送传送戳推荐并查集讲得很好玩的戳#include<cstdio> #include<iostream> #include<algorithm>using namespace std; int n,k,i,num,r1,r2,d,x,y; /*relaton = 0,同类; relation=1,被父节
2016-03-18 23:17:22 192
原创 BZOJ 1260 paint
第一道bzoj上的题,外加3.15test.1【大写的不爽 1260: [CQOI2007]涂色paint 时间限制: 30 Sec 内存限制: 64 MB 提交: 976 解决: 589 [提交][][] 题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以
2016-03-17 01:03:51 507
原创 poj 1014 dividing
戳这里原题1014大致题意: 有六种价值分别为1-6的矿石..各有num [ i ] 个…问两个人能否分得同样多价值的矿石 。 多重背包加二进制优化的方法。貌似还有纯dp和dfs有待探究。首先很明显如果总价值为0,或者是奇数,那显然不能均分。 剩下如果是偶数,用多重背包,dp[j]记录能装价值为j的石头时,可装的最大价值。还有二进制优化喽。#include<cstdio> #include<
2016-03-13 16:44:33 352
原创 最短路 dijkstra
至今我也没把名记住,还被某些人嘲笑许久。。。@。。。 有人说,对于这个算法的恐惧第一个来源于他的名字,没错,而且熟了之后唯一恐惧的就是他的名字,笑。同样推荐坐在马桶上的算法书所讲非常棒哦! 链接 啊哈磊模板代码void dijkstra() { for(i=1;i<=n-1;i++)//寻找离出发点最近的点 { mind=INF; for(j=1
2016-03-11 23:54:40 370
原创 poj 1125 floyd
经典经典题啊! 那个poj题号1125,题目巨长,找度娘撒~~先来介绍一下我们可爱的floyd算法,没错可爱,因为它的核心只有5行,戳这里有讲的特别棒!!@坐在马桶上看算法戳这 核心代码部分【当然你可以写成4行 其实它有动归的思想在啊for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(e[i][
2016-03-11 23:46:56 342
原创 poj 3414 bfs水题但是麻烦
啦啦啦,这个太刷成就感了!!!!115行代码哦 poj 3414原题戳这大致题意: 给你容器a,容器b,还有容量c; 问你是否能够通过有限的步骤达到c的目标状态呢?嗯,关于path数组其实又参看大神的,不得不说太腻害了 操作6种: 1.装满a FILL(1) 2.装满b FILL(2) 3.清空a DROP(1) 4.清空b DROP(2) 5.把A倒入B POUR(1,2) (
2016-03-08 23:59:51 354
原创 poj 3176 dp
poj 3176 dp戳这原题大致题意:给你个数字金字塔,每个点带权值,每个点只可以选上一行相邻的2个点【表述就是这么个意思】,问最长路径值啊思路: of course dp。 这题写的还算顺手啊。事实证明,题是刷熟练的orz。 dp[i][j]表示最长路径,从下往上刷,所以方程: dp[i][j]=map[i][j]+max(dp[i+1][j],dp[i+1][j+1]); 啦啦啦#i
2016-03-06 21:30:43 487 2
原创 poj 2533 dp
题意:找最大上升子序列个数,lis戳这里原题经典dp,又是鬼畜的output limited error【醉 #include<cstdio> #include<algorithm> #include<cstring> #define maxn 1001using namespace std; int in[maxn]; int dp[maxn]; int n,i,j; int main() {
2016-03-06 20:40:02 353
原创 poj 1276 多重背包+二进制
这个就是个提醒二进制的。直接看码吧。 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std;int main(){ int cash, n; int c[100], f[100005]; int i, j, k; int num, co
2016-03-06 19:37:38 390
原创 poj 1260 dp
poj 1260Pearls 大致题意:现在有很多按品质升序排列,当然价格也是,的不同种类的珠宝。为防止只够买一个,顾客需要买所需个数再额外加10个。也可以将这些珠宝升级品质,看是否可以省钱,问你买这么多数量的珠宝最少花多少钱。 输入 第一行:几个cases 第一个case 第一行:珠宝种类n种,接下来n行,是目标购买个数和单价。 输出:最少花的钱 example: Input: 2
2016-03-05 23:15:13 486
原创 poj 3267 the cow lexicon
戳这里原题大致题意:给你w个单词和长度为l的字符串,问在字符串中删除多少个字符可以使其匹配到单词序列。嗯然后是dp。开dp[i]记录在第i位及之前要删除多少字符,已知找到dp[i],初始状态dp【l】=0,然后从后往前扫输入的字符串。这个时候,dp方程有两种 : dp【i】=dp【i+1】+1;(不能匹配) 和 dp【i】=min(dp【i】,dp[pm]+(pm-i)+len);第一个方程
2016-03-04 00:19:50 267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人