摘要: Havel算法的简单思想: (1)对序列从大到小排序 (2)设最大的度数为t,把最大的度数置为0,然后(不包括自己)的t个度数分别减一,就是让第一个与后几个相连, (3)如果序列中出现了负数,证明无法构成。如果序列全为零,证明能构成跳出循环。 4 4 3 3 2 2第二步后 0 3 2 2 1 2排序 3 2 2 2 1 0第三步后 0 1 1 1 1 0排序 1 1 1 1 0 0第二步后 0 0 1 1 0 0排序 1 1 0 0 0 0第二步后 0 0 0 0 0 0全零,能构成图,跳出!出现负数,直接跳出// 1659.cpp : 定义控制台应用程序的入口点。//#include &q 阅读全文
posted @ 2011-05-30 21:11 张兰云 阅读(274) 评论(0) 推荐(0) 编辑
摘要: // 1321.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;char q[10][10];bool row_used[10];int count,num_p;int k,n;void DFS(int i){ if(num_p==k) { count++; return; } if(i>n) return; for(int j=1;j<=n;j++) { if(q[i][j]=='#'&&!row_used[ 阅读全文
posted @ 2011-05-29 18:58 张兰云 阅读(224) 评论(0) 推荐(1) 编辑
摘要: 题目大意:有一些长度相同的木棒,被切成一些小快,每块不超过50个单位长度,现在想拼成原来的样子,并且希望拼成的样子最短。思路: 深搜+剪枝减枝技巧:1.最长的木棍的长度一定不会超过以前的木棍长度,所以从最长的长度开始枚举2.如果总长度不能被选中的长度整除剪掉3.如果所求木棍数等于总长度除以所枚举的木棍长度返回,不要再向下搜索4.每加入一个木棍做一下标记,以免被再次搜索5.从大到小排序,这样如果当前的不能被加入,太大了,只要往后搜小的就行6.如果向下搜索失败回退回来,下一根木块与当前这根碎木块长度相同,则不需要对他进行搜索了,直接跳过#include <iostream> #incl 阅读全文
posted @ 2011-05-28 13:59 张兰云 阅读(374) 评论(0) 推荐(1) 编辑
摘要: NOI2001-聪明的打字员 阿兰是某机密部门的打字员,她现在接到一个任务:需要在一天之内输入几百个长度固定为6的密码。当然,她希望输入的过程中敲击键盘的总次数越少越好。不幸的是,出于保密的需要,该部门用于输入密码的键盘是特殊设计的,键盘上没有数字键,而只有以下六个键:Swap0, Swap1, Up, Down, Left, Right,为了说明这6个键的作用,我们先定义录入区的6个位置的编号,从左至右依次为1,2,3,4,5,6。下面列出每个键的作用:Swap0:按Swap0,光标位置不变,将光标所在位置的数字与录入区的1号位置的数字(左起第一个数字)交换。如果光标已经处在录入区的1号位置 阅读全文
posted @ 2011-05-27 09:59 张兰云 阅读(5068) 评论(0) 推荐(0) 编辑
摘要: 二叉排序树,包括建树的整个过程,还有他的数据结构,应仔细体会。// 2418-二叉排序树.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include<iostream>using namespace std;struct node{ node *left; node *right; double num; char str[59];}*head;//这里建了头指针double sum=0;void insert(char str[]){ node *p1,*p2; p1=head; int t; while(p1!=NULL) 阅读全文
posted @ 2011-05-25 15:07 张兰云 阅读(259) 评论(0) 推荐(1) 编辑
摘要: 字典树:其核心思想就是用时间交换空间其数据结构如下:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典树里没有该单词,如果在 就在该字母的孩子节点里找是不是有单词的第二个字母,没有说明没有该单词,有的话用同样的方法继续查找.字典树不仅可以用来储存字母,也可以储存数字 阅读全文
posted @ 2011-05-23 13:16 张兰云 阅读(235) 评论(0) 推荐(1) 编辑
摘要: 这道题目心得,学会怎么求一个矩阵从(x1,y1)到(x2,y2)的数字的总和,并且还有结合动态规划,#include"stdafx.h"#include <stdio.h> #include <math.h> #include <algorithm> using namespace std; int matrix[8][8]; int s[8][8][8][8]; int dp[15][8][8][8][8]; int cnt; double sum; double mmin(double a, double b) { return a 阅读全文
posted @ 2011-05-21 10:26 张兰云 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 这是关于搜素和剪枝的题目,做这类题目首先要确定剪枝的条件,不然就会超时了。// 1190.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;int mins=10000000,lever,n,m;int n3(int x){ return (x+1)*(x+1)*x*x/4;}void f(int leftv,int floor,int lastr,int lasth,int s){ if(s+2*leftv/lastr>=mins) return; 阅读全文
posted @ 2011-05-20 10:50 张兰云 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 并查集:做题的关键是Union和findSet的编写 ,其中还是有章可循的,下面是poj1988的一个题目// 1988.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;int p[30010],rank[30010],size[30010],N;int findSet(int x){ int fa; if(x==p[x]) return x; fa=p[x]; p[x]=findSet(fa); rank[x]+=rank[fa];//更新u值,因为路 阅读全文
posted @ 2011-05-19 19:11 张兰云 阅读(216) 评论(0) 推荐(0) 编辑
摘要: #include <iostream>#include <queue>#include <vector>#define MAXN 110#define INF 1 << 29using namespace std; struct Node{ int id,dis,c; friend bool operator <(const Node &a,const Node &b){ if(a.dis!=b.dis) return a.dis>b.dis; else return a.c>b.c;}}; int n,m,cm 阅读全文
posted @ 2011-05-19 11:11 张兰云 阅读(263) 评论(0) 推荐(0) 编辑