- 博客(17)
- 收藏
- 关注
原创 UVa 10404
看了大牛的门的思路才水过的...罪过..... dp指使必胜还是必败 只有能转化成0状态的是必胜 #include #include /* 这么想:如果dp[i]==1那么说明棋子个数为i的时候可以获胜,那么加上集合中的元素也可以获胜 */ int dp[1000000]; int set[10]; int cardinary; long num; void ini() {
2012-10-28 15:06:42
989
原创 UVa 10192
最长公共子序列.. 下标开始的时候弄错了...囧..... #include #include int dp[600][600]; char a[600]; char b[600]; int n; int m; int kk=0; void ini() { for(int i=0;i<65;++i) { for(int j=0;j<65;++j)
2012-10-28 14:18:01
643
原创 UVa 10405
#include #include int dp[21][21]; int num; int temp[21]; int answer[21]; void ini() { for(int i=0;i<21;++i) { for(int j=0;j<21;++j) { dp[i][j]=0; } } }
2012-10-22 18:33:25
527
原创 UVa 10305
拓扑排序,开始想图省事结果超时了。。。还是正常写吧。。。。 #include #include int G[101][101]; int select[101]; int indegree[101]; int stack[101]; int nodes; int mark=0; int ini() { for(int i=0;i<101;++i) {
2012-10-21 14:58:32
429
原创 UVa 10596
判断无向图中是否有欧拉回路 并查集判断是否连通,每个点的度数必须为偶数个 #include #include #include int G[201][201]; int num[201]; int parent[201]; int degree[201]; int nodesn; int nodes; int ini() { for(int i=0;i<201;++i) {
2012-10-21 14:09:35
416
原创 Uva 10054
与Uva 10029 相似,不过此题为在无向图中找出欧拉回路,并查集确定是否连通,每个点的度数必定为偶数 #include #include int G[51][51]; int N; int num_of_node; int num_of_null; int mark=0; int parent[51]; int num[51]; int in[51]; int stack[100][
2012-10-21 13:37:39
812
原创 Uva 10129
挺好玩一个题 图论 连通性 并查集 欧拉路 将26个字母看成图的节点,每个单词相当于一条有向边,最后相当于求有向图,因为要用到全部的单词 有向图中的欧拉回路存在的条件:漠视图联通并且除了起点与终点的入度都等于出度(不必要判断哪个是起点,把出入度相等的点都除去剩下的判断就行了)。 另外:剩下的如果大于两个,则必然不存在欧拉路,不可能剩下一个(由图的性质可以知道)。 连通性判断:使用并查集,
2012-10-20 22:40:21
1216
原创 UVa 10004
这个题就是一般的搜索题,用BFS从一个点开始搜,搜的时候按照规则着色,如果遇到搜过并且颜色与当前颜色一样的则说明不能用两种颜色着色。 其实还有更简单的,直接双重循环就成。。。 #include #include int maps[201][201]; int edges; int nodes; int queue[1000]; int color[201]; int vis
2012-10-20 19:30:23
520
原创 UVa 10557
首先判断是否有正环,如果有的话那么如果存在从此环到终点的通路则有解没有的话就直接深搜是否有正环的判断,用一个数据记录下每个点第一次访问时候的能量,然后深搜的时候搜回来如果能量比之前的大说明存在正环。 #include #include #include int maps[101][101]; int visitedD[101]; int visitedB[101]; int energy[101
2012-10-18 16:59:32
546
原创 UVa 784
很水的水题,深搜一遍完事,没啥好说的,贴代码..... /* Uva 784 2012-10-15 20:01:07 */ #include #include #include int height; int width; char maze[100][100]; int sx,sy; void DFS(int x,int y) { if(x>=hei
2012-10-15 20:27:00
389
原创 Uva 657
图论水题 与UVa 572略微类似。 总体思路:先找出每个色子来,然后每一片色子做上自己的标记,深搜一遍。找出‘*’标记的联通分支的个数 扫完一遍以后再扫一遍,此次利用不同色子的独特标记来区分色子,找出‘X’联通分支的个数。最后排序输出。 开始看成8连通域了。。。。。wa。。。 后来每行的最后多输出了一个空格,然后一直PE。。。。。。T_T囧啊。。。。囧啊。。。。 代码如下:
2012-10-15 19:47:40
513
原创 UVa 10010
字符串处理,按照8个方向之中的某个搜到即可(遍历时把每个点当做起始点向八个方向寻找) 开始没看清题....写成深搜了.....杯具......... #include char matrix[51][51]; bool visited[50][50]; char targets[20][100]; int dire[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1
2012-10-14 20:47:24
395
原创 UVa 10361
字符串处理,水题,根据尖括号来分拆第一个字符串,然后按照要求替换第二个字符串中的“省略号” #include #include #include using namespace std; int main() { string buffer[20]; int cases; while(scanf("%d",&cases)!=EOF) {
2012-10-14 20:44:46
389
原创 UVa 572
就是求一个无向图的联通分支的个数。水题 我是这么求的: 用一个visited全局数组来标识某个点是否被访问过,如果一个联通分支中的一个被访问,则该联通分支中的节点必然全部被访问,对所有节点遍历一遍,每次都深搜,如果此节点的visited为假,则说明它属于一个新的联通分支,计数器加一,代码如下~ #include char map[200][200]; int visited[200][2
2012-10-14 20:41:45
459
原创 ZOJ 1006
//-----------------简单的模拟问题,照着题目的意思做就行,开始忘了重新清零数组结果wa了 #include #include char plaintext[71]; int plaincode[71]; int ciphercode[71]; char ciphertext[71]; int k; int n; //-----------------读入并且
2012-04-18 18:59:42
475
原创 POJ 2539
//跟POJ 2479 几乎一样的,由于开始直接把2479的代码贴过来,数组开的不够大...然后WA若干次 #include int a[50001]; int n; int T; int left[100001];//left[i] 存数组元素i左边最大的序列和 int right[100001];//right[i] 存数组元素i右边最大的序列和 void read() {
2012-04-18 18:36:35
567
原创 POJ 2479
//--------------- 左边的最大子序列和加上右边的最大子序列的和----------------------- //---------------算最大子序列和的时候,基本的动态规划 转移方程(以从左向右为例)left[i]=max{left[i-1]+a[i],a[i]} 因为有两个选择:是否包含之前的子序列 #include int a[50001]; int n;
2012-04-18 18:21:28
364
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅