2011年9月6日
摘要: UVA_140这个题目首先在读取数据的时候要把所有顶点存放在一个数组里,同时用邻接矩阵把顶点间的关系存储下来。之后对顶点进行升序排序,之所以排序主要是因为题目中要求结果相同时输出字典序最小的方案,而排序之后顺序深搜到的第一个符合要求的解,一定是字典序最小的解。然后只需要枚举所有排列并进行计算即可。#include<stdio.h>#include<string.h>#include<ctype.h>#include<stdlib.h>int n,a[10],A[10],G[30][30],vis[10],ans[10],res;char b[10 阅读全文
posted @ 2011-09-06 21:06 Staginner 阅读(507) 评论(0) 推荐(0) 编辑
摘要: UVA_167 这个题目本质上就是刘汝佳的白书上P125的八皇后问题。#include<stdio.h>#include<string.h>int a[10][10],b[10],ans;void dfs(int cur){ int i,j,ok,temp; if(cur==8) { temp=0; for(i=0;i<8;i++) temp+=a[i][b[i]]; if(temp>ans) ans=temp; return; } for(i=0;i<8;i++)... 阅读全文
posted @ 2011-09-06 17:07 Staginner 阅读(316) 评论(0) 推荐(0) 编辑
摘要: UVA_165由于h+k<=9,数据量不是很大,所以可以直接枚举、深搜。深搜函数一共有两个,其中一个用来枚举能够连续达到的值,如果通过已有面值可以拼出当前值,则可以继续保持已有面值的状态并继续深搜,或者可以创造一个新的面值等于当前值并继续深搜,当两种手段都不能达到拼出当前值的目的时,当前值减1即为现有面值的状态下能够拼出的最大值;另一个深搜函数用来做判断是否可以通过已有面值拼出当前值的工作,只需要依次选择是否选用当前面值的邮票并使总张数小于h即可,当某一时刻可以拼出当前面值时返回1,所有情况都不能拼出当前面值时则返回0。#include<stdio.h>#include< 阅读全文
posted @ 2011-09-06 16:37 Staginner 阅读(856) 评论(0) 推荐(1) 编辑
摘要: UVA_10012这个题目WA得满痛苦的,一开始不知道为什么会WA,后来意识到原来是少考虑了两个相邻的圆半径差别很大的情况,也就是说一个大圆下面可能可以放很多小圆,这时就又没头绪了。后来看了别人的代码后,给了我很大的启发,原来可以在递归的过程中多引入一个表示当前放置的圆的圆心坐标的数组,来辅助计算。我们以左下角为原点建立直角坐标系,暂且假设第一个圆是紧贴左下角放置的,然后用深搜枚举每个位置可能放的圆,并计算放置这个圆的圆心坐标。计算的时候要依次假设当前圆和前面的某一个圆相切,并依此来计算当前圆的圆心坐标,最后取所有结果的最大值,这样就得到了当前圆的放置时的实际的圆心坐标。在放置完所有圆后,实际 阅读全文
posted @ 2011-09-06 12:25 Staginner 阅读(757) 评论(0) 推荐(1) 编辑