摘要:
View Code 1 /* 2 题意:在一个滑雪道上没个单位长度可以减速 1 ,也可 3 增速 1 ,也可保持不变,滑雪道中有一些corner,在此处要限制速度, 4 问在整个滑雪过程中可以获得最大速度。 5 思路: 1.先求出每点可以允许的最大速度 6 2.然后从起点起计算每点能达到的速度 7 3.求最大速度 8 */ 9 #include<iostream>10 #include<cstdio>11 #include<algorithm>12 #include<cstdlib>13 using namespace std;14 15 con 阅读全文
摘要:
View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<stack> 6 using namespace std; 7 8 char ch[1000]; 9 stack <int> q;10 11 void slovenum()12 {13 int i,len;14 while(!q.empty())q.pop();15 int x=0;16 len=strlen(ch);17 阅读全文
摘要:
View Code 1 /* 2 注意: 3 题非常简单,读题有误 4 不是求最长回文子串 5 而是求 原串的一个子串 ,这个子串反转后还是原串的子串 6 相当于求原串和他的反转串 的最长公共子序列(连续) 7 */ 8 9 #include<iostream>10 #include<cstdio>11 #include<cstdlib>12 #include<cstring>13 using namespace std;14 15 char ch[60];16 char tc[60];17 18 int main()19 {20 int i,j 阅读全文
摘要:
View Code 1 /* 2 题非常简单,但是英文 看了好久才理解意思 3 题意: 4 多人进行投标 每个人可以对同一物品可以投多次标但 价格必须 5 不一样。 6 1.若有一个投标价值出现一次则这个投标人胜出 7 2.若 没有唯一的投标价则 那个投标价投的次数最少,这个价格就是 8 胜出的价格,若有多个价格 有最少的投标次数 9 则去价格最低者,那个人第一次投这个价,谁胜出 10 思路:11 开辟一个数组 num[],记录各个价格投标的次数12 然后从 1 开始搜到上限找出投标次数最少的和最先13 投标者14 需要用一个Struct数组存放{投标人,价格} 15 */16 #incl.. 阅读全文
摘要:
View Code 1 /* 2 开始把这个题想复杂了, 3 其实很简单: 4 思路: 5 找出所有度数为 1 的节点数,消除这些度数为1的节点至少需要多少遍 6 原理: 7 度数为 1 的节点只要把与之相连的那个节点去掉就成孤立的了 8 因此我们再加一条边即使原来的那个邻接点坏了 还有一个边与之相连 9 */10 11 #include<iostream>12 #include<cstdio>13 #include<cstring> 14 using namespace std; 15 16 short int a[10001];17 18 int mai 阅读全文
摘要:
参考:http://www.cnblogs.com/zhixingqiezhixing/archive/2012/04/21/2462351.htmlView Code 1 /* 2 ZOJ :3332 3 思路: 4 这是个竞赛图问题 5 寻找图中的哈密顿路 6 竞赛图中一定有哈密顿路, 7 竞赛图去掉一个顶点和其关联的边仍是竞赛图 8 参考文献 哈密顿路 及 竞赛图 9 */ 10 #include<iostream>11 #include<cstdio>12 #include<cstring>13 #include<list>14 usin 阅读全文
摘要:
定理1:n(n>=2)阶竞赛图一定存在哈密顿通路证明转载自http://web.nuist.edu.cn/courses/lssx/longtime/part4/chapter15/15_02_03_02.htm证 对n作归纳法。n=2时,D的基图为K2,结论成立。设n=k时结论成立。现在设n=k+1.设V(D)={v1,v2,…,vk,vk+1}。令D1=D-vk+1,易知D1为k阶竞赛图,由归纳假设可知,D1存在哈密顿通路,设Г1=v'1v'2…v'k为其中一条。下面证明vk+1可扩到Г1中去。若存在v'r(1≤r≤k),有<v'i,vk 阅读全文
摘要:
View Code 1 /* 2 最短路: 3 floyd倒着用 4 优秀代码中这样判断 5 若: path[i][j]>path[i][k]+path[k][j]则 这不是 最短路 是 impossible 6 若:path[i][j]==path[i][k]+path[k][j] 则 从 i到 j 用不着直接路径 7 */ 8 #include<iostream> 9 #include<cstdio>10 #include<cstring>11 using namespace std;12 13 int path[105][105];14 bool 阅读全文
摘要:
View Code 1 /* 2 思路: 3 我们可以对棋盘进行横向切割和竖向切割 4 s[n][x1][y2][x2][y2]表示:棋盘的左上角坐标是(x1,y1),右下角坐标 5 为(x2,y2) 把这个棋盘分割成 n 一块 6 横向分割: 7 可以在 a处分割 (x1=<a<x2) 比较是 留哪一个继续分割 8 for(a=x1;a<x2;++a) 9 { 10 r=min(r,min(slove(num-1,x1,y1,a,y2)+sum(a+1,y1,x2,y2),//对上边递归继续分割 11 ... 阅读全文
摘要:
(一)巴什博弈(Bash Game):只有一堆n个物品,两个人轮流取,每次最少取一个,最多取m个,最后取完物品者得胜。若有A,B两人,若A先取,在双方都选择最优时,A能否取胜。若 n%(m+1)!=0则先取者A必胜,因为第一次A先取走n%(m+1)个剩下的是(m+1)的倍数因最多只能去m个因此B若去走K个则A可以取走( m+1-k)个他们取走的和为( m+1)则每次剩下的都是(m+1)的倍数,因此A必胜(二)威佐夫博弈(Wythoff Game):有两堆若干物品,两个人轮流从某一堆或同时从两堆中取走同样多的物品,规定每次至少取一个,多者不限,最后取光者胜利。若有A,B两人,A先取A面对(0,0 阅读全文