- 博客(32)
- 收藏
- 关注
原创 畅通工程(DFS求连通块)
要求最少多少个点才能连所有边思路:如果1与2相连,就把1和2看成一个点,即所有连通的点看成所有点; 那么连通n个点至少需要n-1条边#include#include#includeusing namespace std;const int maxn=1000+5;int G[maxn][maxn];int vis[maxn],N,E,cnt;int d
2016-05-25 19:23:48 418
原创 Fire Net
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1162#include#include#include#include#include#include#include#include#include#includeusing namespace std;char G[4][4];
2016-05-25 19:01:36 426
原创 六角幻方(DFS)
六角幻方 把 1 2 3 ... 19 共19个整数排列成六角形状,如下: * * * * * * * * * * * * * * * * * * * 要求每个直线上的数字之和必须相等。共有15条直线哦! 再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.p
2016-05-23 18:49:08 897
转载 HTML常用标签及其全称
转自:http://www.cnblogs.com/debuging/archive/2011/10/19/2217337.htmla href="#">a 超级链接(anchor)a> abbr title="abbreviation的简写">abbr 简写的(abbreviation)abbr> acronym title="Jin Hua
2016-05-23 16:14:36 4670 1
原创 居民集会(分治法)
标题:居民集会蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距离为di。每年,蓝桥村都要举行一次集会。今年,由于村里的人口太多,村委会决定要在4个地方举行集会,其中3个位于公路中间,1个位最公路的终点。已知每户家庭都会向着远离公路起点的方向去参加集会,参加集会的路程开销为家庭内的人数ti
2016-05-22 13:27:29 2701 2
原创 方块填数
【编程题】(满分33分) “数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。 如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部分含有6个小格(以下也称为分组)。 开始的时候,某些小格中已经填写了字母(ABCDEF之一)。需要在所有剩下的小格中补填字母。
2016-05-21 20:05:04 472
原创 完美正方形(DFS 暴力搜索)
标题:完美正方形如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形。历史上,人们花了很久才找到了若干完美正方形。比如:如下边长的22个正方形2 3 4 6 7 8 12 13 14 15 16 17 18 21 22 23 24 26 27 28 50 60如【图1.png】那样组合,就是一种解法。此时,紧贴上边沿的是:60 50
2016-05-21 14:01:44 3536
原创 DNA比对(DP)
【编程题】(满分27分)脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。为了简化
2016-05-18 21:31:07 1136
转载 常见的块状元素与内联元素
转自:http://www.cnblogs.com/vidudu/articles/KwooJan.htmlxHTML究竟有多少个标签?绝大部分人都不能得出一个正确的答案,现在就有个机会,自己数数。答案:91个,哈哈,被你找到了~a, abbr, b, base, body, br, dd, div, dl, dt, em, fieldset, form, h1, h2, h3
2016-05-18 13:37:16 913
原创 最长公共子序列(LCS DP)
状态:d[i][j],i,j表示下标,A[1~i]和B[1~j]的最长LCS 状态转移:d[i][j]--> 1)A[i]==B[j] d[i][j]=d[i-1][j-1]+1; 2)A[i]!=B[j] d[i][j]=max(d[i-1][j],d[i][j-1]);const int maxn=10
2016-05-17 21:47:09 378
原创 最长上升子序列(LIS DP)
状态:d[i]表示以i结尾的最长上升子序列状态转移:d(i) =max{0,d(j)|j当A[i]>A[j]说明又多了个子序列+1; const int maxn=1000+5;int main(){ int n,s[maxn],d[maxn]={0}; scanf("%d",&n); for(int i=0;i<n;i++) cin>>s[i]; d[0]=1;
2016-05-17 21:44:57 289
原创 总结Margin重叠现象
普通与普通大者取大 box test #box{ width: 200px; height: 200px; background: black; margin-bottom: 50px; } #box1{ width: 300px; height: 100px; background: blue; margin-to
2016-05-17 18:52:00 810
原创 最短路径算法汇总
Dijkstrad[0]=0;d[1~n]=INF; 1选最小的d[i];2从i点出发所有边 松弛d[j] 伪代码:for(1~n){所有未标记的点选出d最小的点x;标记x点走过;i点出发所有边 更新d[y]=min(d[y],d[x]+w[x][y]); // 属于E; } 1)简易版:O(n*n) 对边编号:u[i],v[i] 表示第i边连通哪两
2016-05-17 13:43:27 712
转载 A*,Dijkstra,BFS算法性能比较及A*算法的应用
一之续、A*,Dijkstra,双向BFS算法性能比较及A*算法的应用作者:July 二零一一年三月十日。出处:http://blog.csdn.net/v_JULY_v-------------------------------------------------- 引言: 最短路径的各路算法A*算法、Dijkstra 算法、BFS算法,都已在本B
2016-05-16 19:21:32 23632 3
原创 UVa 12563 Jin Ge Jin Qu hao(DP 多种状态表示)
状态A状态:d[i][j] 已经第i首歌还剩j时间,还能最多唱几首决策:唱或不唱 1)d[i][j]-->d[i+1][j-song[i]] ; 2)d[i][j]-->d[i+1][j] ;选择:最大的但j>0的 int dp(int i,int j){ int& ans=d[i][j]; if(d[i][j]>=0) return ans;
2016-05-15 21:05:18 693
原创 UVa 116 Unidirectional TSP (多段图的最短路 DP)
阶段很明显即走到第几列 ;状态:走到第i列j行,d[i][j] 表示至少还要经过的整数,便是求d[i]中的最小解;决策:三种走法;决策选择:选d[i][j]最小的那个#include#include#include#includeusing namespace std;const int maxn=100+5;int G[maxn][maxn],d[maxn][
2016-05-15 10:13:25 382
原创 硬币问题(DP)
题目:有n种硬币,面值分别为V1,V2,...Vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值!状态:d[i] 表示i 元最少要换多少个硬币,那么我们便要求d[S}的值;状态如何转移:i元换零钱V[j](i>=V[j]),后状态变为 d[i-V[j]];状态选取:选d[j]的值最小的,这样d[S]才会最小,所以d[i]=min
2016-05-14 18:47:58 681
原创 dp题目思路理解 (嵌套镶嵌问题DAG)
描述有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。输入第一行是一个正正数N(0每组测试数据的第一行是一
2016-05-14 15:10:17 317
原创 UVa UVA1606 Amphiphilic Carbon Molecules
1.任意枚举两个点计算两边黑点加白点最大值2.任选一个基准点,引一根直线绕着转,计算两边黑点加白点最大值;对于2,再优化一下,将其他点较基准点的极角排序:一个小技巧:将黑点关于基准点对称就相当于白点了,于是只要计算直线一边的点的数目最大值就好了注:当中遇到了一个函数atan2:正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度#includ
2016-05-14 10:54:41 422
原创 UVA 11134 Fabled Rooks(贪心法,区间与选点问题)
x轴,y轴不相关,所以分开考虑贪心法 可以这样思考不同于定区间选点,而是定点选区间,所以理所当然,那个点重合的区间要尽可能少,所以要选占用1~col最多位置的区间,且尽可能保留占用col+1~n的位置区间为以后考虑;那么我们要从col=1~n放,对于每个col选取[a,b]中 1) a最小 2)a相同时b最小的区间; 每选中一个区间就把他抹掉;为什么那么选的原因:1) a最小 :
2016-05-11 21:14:14 359
原创 UVa 120 Stacks of Flapjacks
#include#include#include#include#include#include#include#include#include#includeusing namespace std;int pan[40],P[40]; //P是正确的序列 int ans[40],k;void strrev1(int* p) //UVa 竟然不能用strrev这个
2016-05-11 19:39:38 249
原创 各种排序方法汇总
#include#includetypedef int ElementType;void Swap(int &a,int &b) {int n;n=a,a=b,b=n;}//--简单排序-- //冒泡排序void Bubble_Sort(ElementType A[],int N){ int flag; for(int P=N-1;P>=0;P--) { flag=0;
2016-05-10 19:30:04 848
原创 UVa 1601 The morning after Halloween(单向BFS+双向BFS)
//测试数据 /*5 5 2######A#B## ##b#a######16 4 3################## ########## ### ABCcba #################16 16 3################### ## # #### # ## # c## ## ########b##
2016-05-08 17:33:21 869
原创 UVa 1343 The Rotation Game(IDA*)
主要是设计乐观估计函数来减枝假设中心区域有6个2,2个3,那肯定是消掉3最好,毕竟就两个。那么理想情况下,旋转一次就能把一个3变成2,那么最少操作2次。我们用h()来计算最少还要操作几次,其原理是假设中心区域都放1或2或3,返回至少操作的次数中最小的数maxd是假设最多能操作的数;d是已经操作的数;那么就可以得出乐观估计函数 h()+d>maxd 其含义为 : 若
2016-05-08 15:14:37 534
原创 八面码问题(BFS+Hash)
#include#include#include#include#include#include#include#include#includeusing namespace std;typedef int State[9];const int maxn=1000000;State st[maxn],goal; //相当于st[maxn][9]保存走的每一步下的8个数字
2016-05-07 09:18:28 472
原创 UVa 12118 Inspector's Dilemma
根据欧拉回路的性质算出来的http://blog.csdn.net/wcr1996/article/details/43309671看了大神的,写下自己理解假设一开始只有题中给定的限定的边,若不联通,就一条一条边加,加边要加在两个奇点之间,但是题目只要求求至少有几条边,所以只需算一下就好了。计算所有奇点数,连接n个点最少n-1条边若没有E边的限制,且一共只能有两个奇点。第一
2016-05-02 14:30:37 306
原创 UVa 1599 Ideal Path[待AC]
dix[]保存到终点的最短权值,d[]保存到终点的最短边长结构体保存边和权值,二维数组太大用不了;一直Runtime Error.....#include#include#include#include#include#include#includeusing namespace std;const int INF=(1<<30);const int maxn=100
2016-05-02 08:35:28 303
原创 UVa Self-Assembly(topo sort)[待AC]
#include#include#include#includeusing namespace std;int G[52][52],c[52];bool topo(int u){// printf("%c ",u%26+'A'); c[u]=-1; //visiting; for(int v=0;v<52;v++) { if(G[u][v]){// pri
2016-05-01 21:46:13 346
原创 UVa 1600 Patrol Robot[待AC]
front表示当前搜索层,rear表示上一层d[]表示第几层,b[]表示穿越的障碍数#include#include#include#include#include#includeusing namespace std;const int M=1000;int G[25][25],k,x,y;const int dx[]={0,1,-1,0};const int dy[
2016-05-01 21:36:07 254
原创 UVa 439 Knight Moves
BFS可以想成树的层序遍历,关键是1)判重,表示偷懒用set判重; 2)判断搜索到第几层,用front表示当前层数,rear表示上一层层数。#include#include#include#include#include#includeusing namespace std;set st;char s1[5],s2[5];const int dx[]={2,1,-1,-2
2016-05-01 19:40:33 239
原创 UVa 10129 Play On Words
如果一个单词头和尾字母一样就不用考虑这个单词了; 重复的单词也不用考虑; 并且单词肯定是线性的,所以肯定有两个奇点,一个起点一个终点;在根据欧拉回路的充要条件判断出度入度关系,判断图是否连通就好了#include#include#includeusing namespace std;int in[30],out[30],G[30][30];int vis[30];void eu
2016-05-01 11:54:48 256
原创 欧拉回路(一笔画)
欧拉回路判断:对于无向图:1.两个或没有奇点;2.图连通;对于有向图:1. 两种 (1)一个点出度大于入度1且另一个点入度大于出度1; (2)入度都等于出度; 2.图连通;判断图连通1.dfs;2.bfs;3.floodfill; 即从某个点出发能否把所有点都遍历到;输出欧拉路径: 从上述任一奇点出发(若无奇点则任一点出发就好);1) 随便找一条未走过的相通的边
2016-05-01 11:02:12 1752
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人