算法竞赛题解
算法竞赛入门经典的练习题目解答
leizh007
这个作者很懒,什么都没留下…
展开
-
UVa167 - The Sultan's Successors
题目地址:点击打开链接就是八皇后问题#include #include #include using namespace std;int chess[8][8],visited[3][20];int max_sum;void dfs(int cur,int sum){ if(cur==8) { if(sum>max_sum) max_sum=sum; ret原创 2014-04-26 22:40:55 · 398 阅读 · 0 评论 -
UVa10012 - How Big Is It?
题目地址:点击打开链接这个题的困难就是已经知道一组球的全排列了,怎么求包围该组球的最小的矩形的长度。首先确定每个球圆心的位置:要想使包围的矩形最小,球都是尽可能的与其他球接触的如果两个球a,b接触,那么position[b]=position[a]+2*sqrt(rad[a]*rad[b])第i个球的圆心的位置为max(position[j]+2*sqrt(rad[j]*r原创 2014-04-11 14:15:09 · 375 阅读 · 0 评论 -
UVa331 - Mapping the Swaps
题目地址:点击打开链接就是BFS,对每一个前一个元素大于后一个元素的位置,交换这两个元素,压入队列。最后如果碰到队列中已经有排好序的元素,统计所有排好序的个数就可以了。#include #include #include using namespace std;vector sorted_array;const int maxsize = 1000000;vector que[原创 2014-04-09 16:56:45 · 2582 阅读 · 0 评论 -
UVa10344 - 23 out of 5
题目地址:点击打开链接全排列加二进制法(其实是三进制啦)#include #include using namespace std;int num[5];bool check(int val){ int temp=num[0]; for(int i=0;i<4;++i) { int k=val%3; val/=3; switch (k) { case 0原创 2014-04-08 20:08:01 · 1440 阅读 · 0 评论 -
UVa301 - Transportation
题目地址:点击打开链接就是搜索订单就可以了#include #include using namespace std;struct Station{ int start; int end; int num_of_people;};const int maxsize = 25;Station Orders[maxsize];int people_num_of_stati原创 2014-04-08 19:32:10 · 1213 阅读 · 0 评论 -
UVa539 - The Settlers of Catan
题目地址:点击打开链接就是普通的回溯就可以了#include #include using namespace std;int graph[30][30];int n;int max_num;void dfs(int num,int sum){ for(int i=0;i<n;++i) { if(graph[num][i]!=0) { graph[num][原创 2014-04-07 17:02:07 · 464 阅读 · 0 评论 -
UVa639 - Don't Get Rooked
题目地址:点击打开链接直接用二进制法遍历一遍就可以了#include #include #include using namespace std;int n;string board[4];int max_num;int visited[4][4];bool isSafe(){ for(int i=0;i<n;++i) { for(int j=0;j<n;++j)原创 2014-04-07 13:11:03 · 423 阅读 · 0 评论 -
UVa216 - Getting in Line
题目地址:点击打开链接回溯就可以了,没什么好说的原创 2014-04-06 18:27:53 · 246 阅读 · 0 评论 -
UVa729 - The Hamming Distance Problem
题目地址:点击打开链接用二进制法遍历一遍就可以了#include #include using namespace std;int N,H;bool check(int x){ int num=0; for(int i=0;i<N;++i) { if(x&(1<<i)) ++num; } if(num==H) return true; return fa原创 2014-03-30 10:09:00 · 230 阅读 · 0 评论 -
UVa10098 - Generating Fast
题目地址:点击打开链接直接运用STL的next_permutation算法,异常简单的干活思密达#include #include #include using namespace std;int main(){ int n; cin>>n; while(n--) { string s; cin>>s; sort(s.begin(),s.end()); c原创 2014-03-29 19:55:09 · 215 阅读 · 0 评论 -
UVa146 - ID Codes
题目地址:点击打开链接直接运用STL的next_permutation算法就OK啦#include #include #include using namespace std;int main(){ string s; while(cin>>s&&s!="#") { if(next_permutation(s.begin(),s.end())) { cout<原创 2014-03-29 19:45:32 · 181 阅读 · 0 评论 -
UVa11205 - The broken pedometer
题目地址:点击打开链接一共15盏灯,每盏灯亮或不亮,一共就2^15种可能,所有的遍历一遍就可以了。判断两个表达方式相不相同的时候用hash的方法,空间换时间。#include #include #include #include #include #include using namespace std;const int maxsize = 33000;int isO原创 2014-03-26 22:45:35 · 330 阅读 · 0 评论 -
UVa10167 - Birthday Cake
题目地址:点击打开链接就是A,B遍历一遍就行,注意线上不能有点#include using namespace std;const int maxsize = 110;int n;int a[maxsize][2];int A,B;int count(){ int num=0; int cnt=0; for(int i=0;i<2*n;++i) { if(A*a[原创 2014-03-26 20:00:52 · 377 阅读 · 0 评论 -
UVa10305 - Ordering Tasks
题目地址:点击打开链接拓扑排序#include #include #include #include using namespace std;const int maxsize = 110;int graph[maxsize][maxsize];int inDegree[maxsize];int main(){ int n,m; while(cin>>n>>m&&(n原创 2014-03-24 22:04:34 · 359 阅读 · 0 评论 -
UVa10596 - Morning Walk
题目地址:点击打开链接#include using namespace std;const int maxsize = 210;int f[maxsize];int degree[maxsize];int find_father(int x){ if(f[x]==-1||f[x]==-2) { f[x]=-1; return x; } else return f原创 2014-03-24 20:59:32 · 380 阅读 · 0 评论 -
UVa10054 - The Necklace
题目地址:点击打开链接并查集,欧拉回路,欧拉回路打印#include #include #include #include using namespace std;const int maxsize = 51;int Neck[maxsize][maxsize];int d[maxsize];int degree[maxsize];vector > vpi;int n;原创 2014-03-24 14:30:49 · 309 阅读 · 0 评论 -
UVa10129 - Play on Words
题目地址:点击打开链接并查集和欧拉回路C++代码:#include #include #include using namespace std;bool flag;int d[700];int find_father(int x){ while(d[x]!=-1) return find_father(d[x]); return x;}int main(){原创 2014-03-23 18:10:40 · 360 阅读 · 0 评论 -
UVa10004 - Bicoloring
题目地址:点击打开链接就是简单的BFS就可以了C++代码:#include #include #include using namespace std;const int maxsize = 210;int n;int graph[maxsize][maxsize];int visieted[maxsize];bool flag;void bfs(){ visie原创 2014-03-23 10:13:12 · 401 阅读 · 0 评论 -
UVa10047 - The Monocycle
题目地址:点击打开链接数组int visited[maxsize][maxsize][4][5];//4代表4个方向,5代编5中颜色,0,1,2,3代编北东南东西,Color:0,1,2,3,4用来标记到达某个点的方向,颜色和时间。注意输出格式!C++代码:#include #include #include #include #include using names原创 2014-03-22 22:06:33 · 330 阅读 · 0 评论 -
UVa10557 - XYZZY
题目地址:点击打开链接解法:DFS,遍历到某个点,如果该点已被访问并且当前路径能量值大于已保存的该点的能量值,那么存在一个能量值和为正的环,然后判断能否从该点到达终点就可以了。C++代码:#include #include #include using namespace std;const int maxsize = 110;int visited[maxsize];原创 2014-03-21 20:40:05 · 445 阅读 · 0 评论 -
UVa532 - Dungeon Master
题目地址:点击打开链接BFS搜索六个方向即可C++代码:#include #include #include #include #include using namespace std;const int maxsize = 40;int visited[maxsize][maxsize][maxsize];string s[maxsize][maxsize];int原创 2014-03-21 13:12:38 · 401 阅读 · 0 评论 -
UVa699 - The Falling Leaves
题目地址:点击打开链接C++代码:#include using namespace std;bool flag=false;const int maxsize = 200;int maxNum,minNum;struct Tree{ int data; Tree *lchild,*rchild;};Tree *build()//建树{ int x; cin>>x;原创 2014-03-16 19:10:15 · 180 阅读 · 0 评论 -
UVa839 - Not so Mobile
题目地址:点击打开链接注意输出格式C++代码:#include using namespace std;bool isEqual;int build(){ int W1,W2,D1,D2; cin>>W1>>D1>>W2>>D2; if(W1==0) W1=build(); if(W2==0) W2=build(); if(W1*D1!=W2*D2) is原创 2014-03-17 23:05:06 · 131 阅读 · 0 评论 -
HDU1241-Oil Deposits
题目地址:点击打开链接C++代码:#include #include #include using namespace std;const int maxsize = 110;string OD[maxsize];int m,n;int visited[maxsize][maxsize];void dfs(int a,int b){ if(a>=0&&a=0&&b<n&原创 2014-03-19 20:53:11 · 163 阅读 · 0 评论 -
UVa657 - The die is cast
题目地址:点击打开链接遍历两次就可以了C++代码:#include #include #include #include #include using namespace std;const int maxsize = 60;string s[maxsize];int visited[maxsize][maxsize];int w,h;int num[maxsize原创 2014-03-20 12:20:38 · 248 阅读 · 0 评论 -
UVa784 - Maze Exploration
题目地址:点击打开链接C++代码:#include #include using namespace std;const int maxsize =100;string grid[maxsize];int n;void dfs(int i,int j){ if(i>=0&&i=0&&j<grid[i].size()&&grid[i][j]==' ') { grid[i原创 2014-03-20 13:01:33 · 176 阅读 · 0 评论 -
UVa439 - Knight Moves
题目地址:点击打开链接跟象棋中马一样的走法,BFS遍历C++代码:#include #include #include #include #include using namespace std;const int maxsize = 10;int visited[maxsize][maxsize];int num[maxsize][maxsize];int d[8]原创 2014-03-20 21:35:50 · 355 阅读 · 0 评论