自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 问答 (1)
  • 收藏
  • 关注

原创 POJ1258 Agri-Net(最小生成树)

题意:市长要将每个村庄都连通起来,要求村庄之间路的总和最短要点:学了一下最小生成树,目前只会Kruskal算法,这个算法的基本思路是先按边的权值,从小到大排列,然后每次将边的起点和终点放进集合中,直至所有节点都在一个连通分量中。既然是连通分量,那就正好可以用刚学的并查集。如果这条边的两个节点通过find发现相同了,说明这两个已经在集合中了。最后并查集也可以看成一棵树,与我前面做过的一道

2016-03-31 22:21:22 471

原创 POJ2229 Sumsets(DP)

题意:输入一个数n,要求分解为2的幂的和,求有几种组合方法要点:dp方程很难想到啊,先是考虑如果n为奇数,那么组合中肯定有1,那么f[n]=f[n-1];如果n为偶数的话,先考虑如果有1,那么肯定有两个1合并而来,如果没有1,则全为2,4,6这种,这样我们把分解式中所有数除2,最后得到f[n]=f[n-2]+f[n/2]。我自己想是想不出来了,还是挺巧妙的方法。注意题目要求输出保持在9

2016-03-30 19:14:48 334

原创 HDU1272&&POJ1308 小希的迷宫&&Is It A Tree?(并查集)

题意:中文题不解释要点:两个点之间是否有多种路径就是判断是不是存在环路,所以合并时如果发现两个根结点是相同的,就说明存在环路了。并且还要满足顶点数=边数+1。这题比较恶心的地方在于,如果一开始输入0,0要输出Yes,输入部分比较难写167111702016-03-29 13:50:08Accepted127262MS3368K1009

2016-03-29 14:14:50 419

原创 HDU1856 More is better(并查集)

题意:王老师要找一些男生帮助他完成一项工程。要求最后挑选出的男生之间都是朋友关系,可以说直接的,也可以是间接地。问最多可以挑选出几个男生(最少挑一个)。要点:并查集水题,只要求那个集合中个数最大即可,就是数据比较大,所以rank数组就不开了。166989032016-03-28 11:24:07Accepted1856374MS79996

2016-03-28 11:27:46 273

原创 POJ1703 Find them, Catch them(并查集)

题意:两个两个输入一些数,D代表这两个数不同,A代表查询这两个数是否相同要点:与食物链那一题类似,都是开多倍数组,储存每种情况15321734Seasonal1703Accepted1680K375MSC++973B2016-03-27 18:34:06#include#include#include#d

2016-03-27 18:59:37 306

原创 POJ1182 食物链(并查集)

题意:中文题不解释要点:很经典的并查集问题,也很难。网上一共两种做法:一种是算相对类别偏移量,用了一系列找规律,难的爆炸,反正我看懂了但是再做一次肯定是做不出来的;另一种是将数组开三倍,表示所有的情况,这种我还可以尝试一下。开三倍数组存储所有情况:要点是将P[X]开成最大值的三倍,1~n表示当前x属于A;n+1~2n表示当前x属于B,2n+1~3n表示当前x属于C,每次

2016-03-26 16:12:17 295

原创 POJ2524 Ubiquitous Religions(并查集)

题意:学校中每个人都有宗教信仰,现在只能知道某些人的宗教信仰相同,求总共有几种宗教要点:水题,跟HDU1213一毛一样,都是求最后集合个数,早知道不做了15315712Seasonal2524Accepted504K313MSC++691B2016-03-26 12:24:55#include#include

2016-03-26 12:27:58 358

原创 HDU3635 Dragon Balls(并查集)

题意:n个城市中有n个龙珠,一开始按顺序排列,但龙珠会转移,输入T A B 代表现在龙珠A所在城市中的所有龙珠都转移到龙珠B所在的城市中,Q A 代表查询龙珠A的所在城市和城市中有多少龙珠以及龙珠A转移了多少次要点:其他不难,主要是查询龙珠A转移了几次这一步比较难,因为我们进行了状态压缩,所以每次只要根节点会增加转移数,而其子树中所有结点都是不增加的。所以我们另设一个数组来记录转移数,

2016-03-26 10:32:01 286

原创 HDU1213 How Many Tables(并查集)

题意:请客吃饭,认识的才能坐一桌,每次给两个认识的人,求需要多少桌要点:并查集裸题,就是多了一个求最后集合个数的步骤,要求最后集合个数,只要每次合并的时候当前集合数-1即可166721872016-03-25 21:55:04Accepted12130MS1728K738 BC++seasonal#incl

2016-03-25 22:20:56 328

原创 POJ1611 The Suspects(并查集)

第一次学并查集,总算对它有了一定的了解,基本就是连通的集合的问题参考博客:基本概念   结合一些具体问题题意:学校中一共有m个学生,n个组,学生编号从0~m-1,现在学生0感冒了,如果组中有一人感冒,剩下的人都会感冒,给出每个组的具体学生序号,求出有多少人会感冒要点:并查集裸题,要点是先将所有组合并,最后找到根节点为0的学生数目,要注意0不一定是最终的根节点

2016-03-24 22:22:51 384

原创 POJ3126 Prime Path(BFS)

题意:从一个素数变到另一个素数,要求每次只能动一位上的数字,并且要求中间值也必须是素数要点:简单的BFS水题,只要将每个节点的变动方向写清楚就行了。15306522Seasonal3126Accepted272K16MSC++1625B2016-03-24 09:38:53#include#include#

2016-03-24 09:55:01 360

原创 POJ3414 Pots(BFS)

题意:给两个不同容量的杯子,要求经过最少的操作使其中一个杯子中有cL水要点:也就是BFS题,只不过这题每个节点有6种方向15304559Seasonal3414Accepted212K0MSC++2024B2016-03-23 19:34:10#include#include#include#define

2016-03-23 19:59:11 340

原创 POJ3984 迷宫问题(BFS+记录路径)

题意:迷宫找出口问题,要求输出最短路径要点:普通迷宫找出口问题我倒是会做,但这题要记录路径,所以抓瞎了。看了一下,主要是要用一个队列数组来实现队列,用front指向当前pop出的结点,用rear指向当前入队的结点,通过记录前驱来记录通过的路径,并且通过递归倒序输出数组也就是正序输出路径,注意起点是不包括的。15303623Seasonal3984

2016-03-23 15:48:43 1338

原创 POJ1905 Expanding Rods(二分)

题意:给一个长度为L的钢条,加热后长度改变并且弯曲成一个弧,算出之间的距离要点:基础思想是二分,但其实里面包含了很多证明参考博客:点击打开链接15301383Seasonal1905Accepted196K0MSC++510B2016-03-22 20:56:20#include#include#inc

2016-03-22 21:12:00 360

原创 POJ1426 Find The Multiple(DFS||BFS||同余模定理)

题意:给出一个数,寻找这个数的倍数,要求只能由0和1组成要点:可以用BFS和DFS做,如果用BFS做要用同余模定理,否则因为数字很大,队列要开longlong型会爆内存。用DFS可以避免内存过大的问题,但深度要自己猜一个数,来过oj的数据,有点投机取巧。DFS:15298844Seasonal1426Accepted168K125MS

2016-03-22 14:24:38 509

原创 POJ1837 Balance(DP)

题意:一个杠杆问题,给出一些悬挂位置,正数代表右边,负数代表左边,再给出一些不同重量的砝码,要求输出有几种平衡的可能要点:dp问题,主要是状态转移方程比较难写:dp[砝码i][力矩k+砝码i*挂钩j位置] += dp[砝码(i-1)][力矩k]可以这么考虑,最后输出dp[i][maxn],因为每次砝码摆放位置不同,有很多种达到平衡的情况,那么每次都累加,最后就能算出有多少方案,

2016-03-20 15:17:11 352

原创 HDU4135 Co-prime(容斥原理)

题意:寻找(a,b)中与n互质的数的个数要点:参考博客点击打开链接,求互质一般都是用容斥原理。166148282016-03-20 11:03:58Accepted41350MS1780K872 BC++seasonal#include#include#include_int64 a[1000], num;

2016-03-20 11:24:01 278

原创 POJ1833 排列

题意:中文题要点:注意这里讨论的是1~n,所以就算你输入98765,输出还是1234515291544Seasonal1833Accepted172K454MSC++512B2016-03-20 09:42:42#include#include#include#includeusing namespac

2016-03-20 09:46:05 340

原创 POJ1742 Coins(多重背包可行性)

题意:给出n硬币的价值和个数,再给一个数值m,求在这些硬币能组成多少种总和(要求小于m)要点:与一般背包问题求最值不同,这里是求能有几种组合,应该是叫做背包的可行性问题,看了网上的代码,大体是用两个数组,一个储存总和是否出现过,一个储存当前硬币使用的数量。15278156Seasonal1742Accepted1728K1282MSC

2016-03-17 09:26:53 425

原创 HDU2191 多重背包

题意:中文不解释要点:多重背包裸题,主要是用了两种做法,一种直接按个数全拆成01背包,复杂度是O(V*Σn[i]);一种用二进制拆成复杂度为O(V*Σlog n[i])。复杂度是O(V*Σn[i]):165711182016-03-16 15:17:11Accepted219131MS1416K512 BG++se

2016-03-16 15:33:25 278

原创 ZOJ3866 Cylinder Candy(数学)

题意:圆柱给出半径r,高度h,先在往这个圆柱体上涂一层厚度为d的巧克力,求总体积和总表面积要点:纯数学积分题,就当复习数学了。#include#include#include#include#define PI acos(-1.0)int main(){ double r, d, h; int t; scanf("%d", &t); while (t-

2016-03-14 22:38:21 740

原创 ZOJ3861 Valid Pattern Lock(DFS||打表+枚举)

题意:手机九宫格锁,共9个数,然后给出规定,只能用给定的n个数做密码,求不同的锁屏方法有几种对于一个点可以走向其他相邻8个方向,对于中间有相互隔开的情况,例如1到3,如果2已经访问过,那么方案是可行的,输出所有锁屏方案路径要点:可以DFS或直接排列判断,排列的话主要的难点在于判断是否合法,因为数据较小,直接打表出要考虑的几种情况,并用一个vis数组对每一个排列从头到尾进行是否走过的

2016-03-13 16:29:28 296

原创 POJ2063 Investment(完全背包)

题意:买债券,总共n种债券,分别给出价格和收益,给出本金和年数,每年的本金都会改变,问最后本金加收益的和要点:很明显的完全背包问题,只要每次改变本金就可以,但这里有个问题就是数目过大,直接开数组会爆内存。题目中说本金和债券的价格都是1000的倍数,所以开数组时可以压缩,价格同时除1000就行,读题还是非常重要的。15261964Seasonal206

2016-03-13 13:51:27 490

原创 POJ1948 Triangular Pastures(01背包)

题意:输入一些栏杆,可以相互拼接,要求拼成一个面积最大的三角形要点:已知三角形三边可以用海伦公式计算三角形面积:S=√[p(p-a)(p-b)(p-c)],p=(a+b+c)/2。因为总长确定,所以确定两条边就可以知道第三条边,用dp[i][j]储存能否拼成长度为i和j的两条边。

2016-03-12 21:41:20 439

原创 POJ3628 Bookshelf 2(01背包)

题意:你要很多不同高度的奶牛,想要达到一个高度为b的书架,将奶牛一个个叠起来,要求奶牛的高度和大于b,输出大于b且最小的高度和要点:将所有奶牛高度都加起来减去b的值作为背包大小,这样便转化成一个比较普通的01背包问题。现在就是等于向背包里放奶牛,使得高度和最大,这样与b的差值就会越小。这题稍微有点不同,只有一个高度值,原本是有一个价值一个重量两个值,但其实是一样的,最终都是讨论当前这个

2016-03-11 18:25:10 415

原创 背包问题

参考文献:背包九讲一:01背包问题最基础的背包问题,关键是每个物品只要一件,基本的状态转移方程就是:f[i][v]=max{f[i-1][v],f[i-1][v-w[i]]+v[i]} 有个需要注意的地方是:要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。如果并没有要求必须把背包装满,而是只希望价

2016-03-11 15:46:29 420

原创 例题7-6 UVa140 Bandwidth(枚举+剪枝)

题意:看白书要点:就是全排列问题加上一些剪枝,输入存储有些麻烦。注意如果有多个最小的排列,输出字典序最小的那个#include #include #include #include #include #include using namespace std;int num, ahl[30], map[30][30];int save[10], node[10

2016-03-10 19:46:35 451

原创 子集生成

一:增量构造法思路是一次选出一个元素放入集合中#includevoid print_subset(int n,int a[],int cur){ for (int i = 0; i < cur; i++) printf("%d ", a[i]); printf("\n"); int s = cur? a[cur - 1] + 1 : 0;//cur为0则s为0,否则s=a[

2016-03-09 19:05:18 358

原创 习题6-5 UVa1600 Patrol Robot(BFS)

题意:机器人走迷宫求最小步数,不同之处在于机器人最多能一次连续穿过k堵墙。要点:BFS模板题稍微有些变换,将vis数组增加到三维来记录穿墙数即可,因为有的时候就算坐标相同,但穿过墙数不同也是不同的。#include#include#include#includeusing namespace std;int map[50][50],vis[50][50][50];

2016-03-08 09:11:02 404

原创 枚举排列

根据字典序,依次输出全排列,整理一下,有两种方法:一种递归,一种利用C++中的STL一:生成可重集的排列#include#include#includeint p[20];int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}void print_permutation(int n, i

2016-03-06 16:20:09 397

原创 例题7-1 UVa725 Division(枚举)

要点:用0~9编成两个五位数,要求两个数中每个数字只出现一次,第二个数中可以有前导0要点:用第二个数直接暴力枚举就可以#include#includeint num[10];int judge(int a,int b){ memset(num, 0, sizeof(num)); if (b > 98765) return 0; if (a < 10000)

2016-03-06 14:44:55 524

原创 习题6-3 UVa536 Tree Recovery(树的遍历转换)

题意:给出先序和中序求后序要点:递归完成,只要注意一下边界就可以了,水题#include#include#includechar s1[30], s2[30];char tree[30];int count;void build(int l1, int r1,int l2,int r2){ if (l1 > r1) return; //空树 int p

2016-03-06 09:31:38 584

原创 习题6-2 S-Trees(树)

题意:看白书要点:题目很简单,就是树的水题,我是直接建树然后模拟,第一次WA主要是最后想输出字符串但没有在末尾加上\0,编译器可以通过但会WA,下次要注意了。这题也可以不建树直接用下标法做,我看了一下网上的代码,确实简单多了1.建树+模拟#include#include#include#includeint tree[10000],rule[10];char

2016-03-03 10:15:28 396

原创 习题6-1 UVa673 Parentheses Balance(栈)

题意:输入一个括号序列,判断是否合法要点:栈的水题,注意空行也合法以及每次要清空栈就行了。话说自己写的就是丑,而且中间没有考虑直接失败的例子,每次都得全部读完,时间复杂度不是很好,不过AC也就行了#include#include#include#includeusing namespace std;int main(){ int t; char ch[10

2016-03-02 18:41:47 417

原创 例题6-20 UVa1599 Ideal Path(两次BFS)

题意:看白书要点:因为这次需要找字典序最小的边,所以以前随机打印的方法是不行的,这道题用了一个很巧妙的方法:先从终点倒着BFS,将所有结点到终点的最短步数储存起来,然后直接从起点开始走,再一次BFS,到达每一个新结点时要保证d值恰好-1,选择颜色字典序最小的走,如果有多个最小,就存入队列,下一次再比较新结点选择最小值。这道题还是挺难的,注意因为这题的数据比较大,所以直接用二维数组存储边

2016-03-01 14:21:43 843 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除