![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
其它
文章平均质量分 57
fengyu0556
这个作者很懒,什么都没留下…
展开
-
Trick
1. 在soap中传递hibernate查询语句时,遇到大于号,小于号得用>和$lt;来代替原创 2013-04-16 21:20:10 · 578 阅读 · 0 评论 -
POJ_1019_Number Sequence
<br />还有一种O(1)的算法,有待学习,先贴暴力点的<br /> <br />///暴力求解,试解出i所在的范围即在1-x内,然后依次求解每一个数 #include<stdio.h>#include<string.h>char s[7];long long n,t;int main(){ int cas; scanf("%d",&cas); while(cas--) { int i,j,k,ok=0,len; long long last=0;//有原创 2010-06-13 00:49:00 · 392 阅读 · 0 评论 -
POJ_1016_Numbers That Count
<br />///模拟,按照题目所述,进行一次inventorying就判断一次,若有符合的就退出循环 #include<stdio.h>#include<string.h>char ini[20][150];char s[5];int num[10];int len;int change(int k){ len=strlen(ini[k]); memset(num,0,sizeof(num)); int i,j,t; for(i=0;i<len;i++)原创 2010-06-12 16:36:00 · 275 阅读 · 0 评论 -
POJ_1008_Maya Calendar
<br />//简单模拟,但是要细心 ///开始的时候没有注意要输出set数目,不细心///注意:1.year是从0开始编号的,天数也是/// 2.260天是算第0年,同理 #include<stdio.h>#include<stdlib.h>#include<string.h>char Haab[19][10]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen",/"yax","zac","ceh原创 2010-06-11 19:21:00 · 255 阅读 · 0 评论 -
POJ_1107_W's Cipher
<br />///置换群,比1026要简单很多#include<stdio.h>#include<string.h>char s[85],r[85];int f[85],a[3],num[3],len;int rotate(int c,int k){ int i,t=0; i=c; while(t!=k) { i++; if(i>len-1) i=0; if(f[i]==f[c]) t++; } r[i]=s[c]; retu原创 2010-06-14 07:18:00 · 455 阅读 · 0 评论 -
POJ_1102_LC-Display
<br />//简单模拟#include<stdio.h>#include<string.h>int s;int black(int k){ int i; for(i=0;i<k;i++) printf(" "); return 0;}int heng(int k){ int i; for(i=0;i<k;i++) printf("-"); return 0;}char n[10];int print(){ int i,j,原创 2010-06-14 04:17:00 · 352 阅读 · 0 评论 -
POJ_1013_Counterfeit Dollar
<br />///我的思想是设置一个状态数组state,初始时将其全部设置为零,先判断down和up情况, ///若为down则将重的一方每个状态都加一,轻的一方都减一;up时,同理。最后处理even情况,///将在even中出现的left和right方都设置为零。最后扫描state,找出min和max值,若max的///值只有一个,则其所代表的coin重,若min值只有一个,其所代表的coin轻///因为只有一个coin有问题,所以只有一个coin状态唯一。 #include<stdi原创 2010-06-12 01:36:00 · 295 阅读 · 0 评论 -
POJ_1809_Regetni
///一个点的坐标只有四种可能,用0表示 偶数,1表示奇数 ,则四种可能为(0,0),(0,1)///(1,0),(1,1)。观察公式A=|x1y2 - y1x2 + x2y3 - y2x3 + x3y1 - y3x1|/2,仔细分析之后///可以得到A要为偶数,那么三个点的坐标中至少要有两个点的类型一样,这样就可以将问题的///复杂度降到O(1)了。 #includeint main(){ int cas,t=1; scanf("%d",&cas); while(原创 2010-06-10 22:03:00 · 472 阅读 · 0 评论 -
POJ_1657_Distance on Chessboard
<br />/*棋盘上,无论起点和终点在什么位置: 1.王:移动步数是横纵坐标的差值的最大值; 2.后:8个方向的直线式一步,其余2步。 3.车:水平竖直4个方向一步,其余2步。4.象:注意到棋盘上横纵坐标和的奇偶性,可知只有和起点类型一样的才能到达否则不可达;若起终点在一条直线上,一步,否则需要2步*/ #include<stdio.h>int abs(int x){ if(x>0) return x; else return -x;原创 2010-06-11 13:22:00 · 422 阅读 · 0 评论 -
POJ _2436--Disease Management
<br /> <br />1.使用algorithm中的next_permutation函数<br />本题主要是使用位与运算,同时需要组合和枚举;先枚举每一种k类疾病的组合,对此组合然后与每一头牛进行或运算,若在已有的集合中不会增添新的疾病,则数量加一,以此类推,求出最大的即为结果<br />对于位运算,最低位为1,次位为2,...,第i低位为2^(i-1),若第i位表示的疾病在集合中,则将集合表示成的数加上2^(i-1);如此则可以生成一个数代表整个集合。<br />须注意,next_permutati原创 2010-06-09 13:17:00 · 632 阅读 · 0 评论 -
1836--Alignment
<br />////POJ DP题目,与NOI2004的排队很相似,但本题要更深入一点////即满足A1<A2<A3<...<Ai=>Ai+1>Ai+2>...>An///使用最长递增(减)子序列,枚举中间人,但是需要注意中间人///有可能有两个人,譬如1 2 3 1 2 3 2 1;从枚举的地方向后查找最长递减序列中和中间人///比较,相等的情况下,再比较以查找到的元素为起点的最长递减序列的长度,以元素编号来区分///中间人是一个还是两个。 #include<stdio.h>原创 2010-06-06 23:59:00 · 350 阅读 · 0 评论 -
2533--Longest Ordered Subsequence
///POJ--2533///最长递增子序列,经典DP,算法复杂度为O(n3),有复杂度为O(nlnn)的算法#include#include#define LOCALint num[1005],flag[1005],n;int longest;int search_max(){ int i,j; for(i=0;iflag[j]+1?flag[i]:flag[j]+1; } if(!flag[i]) flag[i]=1; longest=fl原创 2010-06-06 03:23:00 · 332 阅读 · 0 评论 -
POJ_2386_Lake Counting
<br />//简单的一道题,使用dfs和bfs都可以,当然使用bfs效率比较高,这里使用bfs实现 //与1562差别不大#include<stdio.h>#include<queue>#include<string.h>using namespace std;char map[105][105];bool vis[105][105];//保存访问过的节点 //八个方向 int di[8][2]={-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-原创 2010-07-31 01:19:00 · 548 阅读 · 0 评论 -
POJ_1014_Dividing
<br />///动态规划,又有点筛选法的思想,按价值划分状态,要求能否划分出一半的价值也就是求//value[halfvalue]的状态。 #include<stdio.h>#include<string.h>//保存每一种价值的石头 int num[7];//value[i]用来指示是否能划分出i的石头出来,1则能划分出来,反之为0。 bool value[100005];int main(){ freopen("divide.in","r",stdin);原创 2010-07-30 23:37:00 · 468 阅读 · 0 评论 -
POJ_1611_The Suspects
<br />//我写的没有用典型的并查集做,利用bfs选择出受感染的小组,然后再统计这些小组里共有多少人#include<stdio.h>#include<string.h>#include<queue>using namespace std;int num[500][30005];int ans,n,m;int main(){ while(scanf("%d%d",&n,&m)==2&&(m+n)) { if(!m) printf("1/n");原创 2010-07-31 15:14:00 · 456 阅读 · 0 评论 -
POJ_1321_棋盘问题
<br />///简单DFS #include<stdio.h>#include<string.h>int map[10][10],n,k;////map保存地图 long num;///保存最后结果 int f[10];///存储每次放棋子的列号 ////判断要放棋子的列是否已经有棋子 int exist(int t,int k) { int i; for(i=1;i<t;i++) { if(f[i]==k) return 1; } retu原创 2010-06-19 12:55:00 · 260 阅读 · 0 评论 -
POJ_3126_Prime Path
<br />///BFS,因为每次只是变换一个数位,这样就有四种选择,相当于一个四叉树,而在每一分支里///又可以分成最多十支,vis数组保存最后得到的结果。若vis[k]为-1,则说明没有变换到目标///的方法,否则为目标值。 程序中也利用了vis数组来判断重复。写出分析重点,好好体味一下///BFS题目的特点。////可以进行适当的剪枝,也可以不用STL中的queue,因为它实在是太慢了 #include<stdio.h>#include<string.h>#includ原创 2010-06-20 20:48:00 · 346 阅读 · 0 评论 -
POJ_2488_A Knight's Journey
<br />///DFS,回溯 ///因为要是字典序输出,所以1.搜索起点时必须从第一列开始,而且要从上到下 2.搜索骑士的///下一步时要注意顺序,设当前点为(x,y),则搜索顺序应该为(x-1,y-2),(x+1,y-2),(x-2,y-1)///,(x+2,y-1),(x-2,y+1),(x+2,y+1),(x-1,y+2),(x+1,y+2) ///3.如果能有任意一点可以possible,他就可以到达(1,1),所以从(1,1)出发就不应///该会impossible#in原创 2010-06-19 16:34:00 · 325 阅读 · 0 评论 -
POJ_1080_Human Gene Functions
<br />本题也是一道很经典的DP,状态转移方程为:<br />ans[i][j]=max{ans[i-1][j-1]+score[str2[i]][str1[j]],ans[i-1][j]+score[str2[i]][-],ans[i][j-1]+score[-][str1[j]]}<br /> <br />其中的str1[i]等均指的是字符所在的位置。<br />num[0][i]和num[i][0]的情况:<br /><br /> <br />Null<br />A<br />G<br />T<b原创 2010-06-26 01:36:00 · 291 阅读 · 0 评论 -
POJ_1159_Palindrome
<br />/////与1458和2250 本质是一样的,但是这题因为数据量大,直接用二维数组会超内存,所以需要用////到LCS改进的方法即动态数组来存储。因num[i][j]只与num[i-1][j-1]和num[i-1][j],num[i][j-1]////有关,这样便能够实现动态数组。////求最少插入字符数,将其反串与本身求最长公共子串,则子串必为回文,而剩下的字符必须要等待///插入字符与之配对才行。 #include<stdio.h>#include<string.h>原创 2010-06-25 11:43:00 · 386 阅读 · 0 评论 -
POJ_1458_Common Subsequence
<br />#include<stdio.h>#include<string.h>char p[500],q[500];int num[500][500];int main(){ while(scanf("%s%s",p,q)!=EOF) { int len1=strlen(p),len2=strlen(q); int i,j; for(i=0;i<len1;i++) num[0][i]=0; for(i=0;i<len2;i++) num[原创 2010-06-24 13:21:00 · 477 阅读 · 0 评论 -
POJ_1579_Function Run Fun
<br />///使用递推的方法,简单的DP,但是思想很重要 #include<stdio.h>long ans[21][21][21];int main(){ int a,b,c; int i,j,k; for(i=0;i<21;i++) { for(j=0;j<21;j++) { ans[0][i][j]=1; ans[i][0][j]=1; ans[i][j][0]=1; } } for(i=1;i<21;i++)原创 2010-06-24 00:19:00 · 287 阅读 · 0 评论 -
POJ_1953_World Cup Noise
<br />////简单DP,ans[i]=(ans[i-1][0]+ans[i-1][1]+ans[i-1][1]) #include<stdio.h>long ans[45][2];int main(){ int cas; scanf("%d",&cas); int num,k,i; ans[1][0]=ans[1][1]=1; for(i=2;i<45;i++) { ans[i][0]=ans[i-1][0]+ans[i-1][1]; ans[i][原创 2010-06-24 10:17:00 · 283 阅读 · 0 评论 -
POJ_1163_The Triangle
<br />///简单DP#include<stdio.h>#include<string.h>int n;int triangle[105][105];int sum[105][105];int main(){ while(scanf("%d",&n)==1) { int i,j; memset(triangle,0,sizeof(triangle)); for(i=1;i<=n;i++) { for(j=1;j<=i;j++)原创 2010-06-23 22:14:00 · 378 阅读 · 0 评论 -
POJ_3083_Children of the Candy Corn
<br />///BFS+模拟,模拟有点麻烦#include<stdio.h>#include<string.h>#include<queue>using namespace std;queue<int> q;int w,h;char map[45][45];int dl[4][2]={{0,-1},{-1,0},{0,1},{1,0}};int vis[45][45];int dire,k;///指向当前移动方向。 int left(int a,int b,in原创 2010-06-23 15:32:00 · 462 阅读 · 0 评论 -
POJ_2251_Dungeon Master
<br />////三维迷宫求最短路径,BFS,三维的状态空间 ///提交WA两次,一次忘记将栈清空,一次忘记把本地测试的语句删掉 #include<stdio.h> #include<string.h> #include<queue> using namespace std; char dungeon[35][35][35]; int f[35][35][35]; int dr[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1原创 2010-06-22 12:42:00 · 294 阅读 · 0 评论 -
POJ_3009_Curling 2.0
<br />///使用DFS+回溯法,当然也可以用BFS,但是那样的话可能要把每个状态下的map都要和位置///坐标一样入栈,占用的空间肯定要大于使用DFS不少。改天用下BFS试试。///题目倒不难,关键还是读懂题意,并且构思好程序的流程同时还要注意下程序中的细节,///当程序运行达不到预期结果时,要快速找到程序的出错点。///程序可能有点乱,主要是dfs中的那几个分支也就是方向的代码有点类似,占用了很大篇幅 #include<stdio.h>#include<string.h>原创 2010-06-23 03:48:00 · 423 阅读 · 0 评论 -
POJ_3087_Shuffle'm Up
<br />////简单模拟 #include<stdio.h>#include<string.h>char ans[205][205];char s1[105],s2[105],target[205];int len;int statics(){ int i,j; int times=0; for(i=0;;i++) { int k=0; for(j=0;j<len;j++) { ans[i][k++]=s2[j]; ans[i原创 2010-06-21 20:24:00 · 285 阅读 · 0 评论 -
POJ_3414_Pots
<br />//////BFS,二维状态空间,并且需要打印出得到目标状态的路径. //////使用DFS搜索路径,BFS查找最短路径长度 //////主要考虑每个节点有六种可能即分支,广度搜索,直到有一只pot中剩有目标数量的水/////停止,若最后f[][]中c行或c列中所有值均为0,即没有变化,则说明,由a和b不能"扩展"////到c所在的节点,答案就是impossible。 #include<stdio.h>#include<string.h>#include<queue>原创 2010-06-21 14:30:00 · 380 阅读 · 0 评论 -
POJ_2081_Recaman's Sequence
<br />///打表,注意f数组的大小 #include<stdio.h>#include<string.h>bool f[3020000];int ans[500005];long k;int main(){ memset(f,0,sizeof(f)); ans[0]=0; long i; for(i=1;i<=500000;i++) { if(ans[i-1]>i&&f[ans[i-1]-i]==false) { ans[i]=ans原创 2010-06-24 01:00:00 · 306 阅读 · 0 评论 -
POJ_1426_Find The Multiple
<br />////运用DFS解决,深搜每一位,最多100位,搜每一位时算出当前数MODn的余数,留作下次使用///强烈提醒自己提交code时注意删去不必要的代码行,因为这WA了一次 #include<stdio.h>#include<string.h>char s[105];int n,ends;int dfs(int k,int remain){ int t=remain,i; if(ends) return 0; if(k>99) return 0;原创 2010-06-20 15:12:00 · 348 阅读 · 0 评论 -
POJ_3278_Catch That Cow
<br />////广度搜索BFS///使用数组实现循环队列,注意front和rear。另外有可能出现数组开的比较小的情况,那样///会导致数据还没有处理就被刷掉的情况,因此要开的"足够大”。 用for循环实现从三个///方向搜索。 用vist数组保存访问情况,已经访问的就不需要再访问。当n大于k时,只能够///不断的向左做减一搜索,所以次数为n-k。 #include<stdio.h>#include<string.h>#define MAX 50000bool vist[原创 2010-06-19 20:03:00 · 372 阅读 · 0 评论 -
HDOJ--1066--Last non-zero Digit in N!
<br />#include<stdio.h>#include<string.h>char num[10000];int main(){ while(scanf("%s",num)==1) { int len,i,j,ret,temp,c; len=strlen(num); for(i=0,j=len-1;i<=j;i++,j--) { temp=num[i]-'0'; num[i]=num[j]-'0'; num[j]=temp;原创 2010-06-02 00:05:00 · 617 阅读 · 0 评论 -
POJ_1117_Pairs of Integers
<br />///如果当做数学题来做的话肯定要超时,因为10^9数量级太大///这题我用的构造法,设要求的数中较大的一个为m,则m的位数最多与和相等。设要去掉的是第//k位数字(从左到右依次为0,1……),通过k位将m分成两部分,右边部分肯定和加数的右边相等//且要满足两对应位数字之和的末位与n的对应位相同,例如10=10+0;k位左边部分应与加数错开//一位;枚举k同时搜索k右边的部分,得到右边部分,左边部分可以根据和推算出来//注意搜索右边部分时,注意每一位有可能有两种情况,假设和的原创 2010-07-25 21:17:00 · 1929 阅读 · 0 评论 -
POJ_1018_Communication System
<br />////枚举+贪心,枚举每一个带宽作为最小带宽,然后寻找每一个设备中带宽大于或等于最小带宽但是价格最低////的设备,比较每一次B/P的结果,取最大值 #include<stdio.h>#include<time.h>int bp[105][205];int price,bandwidth;double max;int sort(int *num){ int i,j; for(i=4;i<=2*num[0];i+=2) { for(j=2*num原创 2010-07-02 15:26:00 · 392 阅读 · 0 评论 -
POJ_1088_滑雪
<br />#include<stdio.h>#include<string.h>int hgt[105][105],f[105][105];int di[4][2]={-1,0,1,0,0,-1,0,1};int r,c,max;int out(int p,int q){ if(p<1||p>r||q<1||q>c) return 1; return 0;}int dfs(int p,int q){ int i,num; if(f[p][q]!=1)原创 2010-06-30 21:53:00 · 429 阅读 · 0 评论 -
POJ_1050_To the Max
<br />///经典的DP问题,将二维转化为一维,即一个序列的连续之和最大///先枚举i,j,i为起始行,j为终止行,将从i到j的行对应元素相加,这样得到一行元素//求此序列中的最大连续和,如此,便可以得到最大的子矩阵之和。 #include<stdio.h>#include<string.h>long temp[102];long f[102];long max;int map[102][102],n;int main(){ //freopen("maxsum原创 2010-06-29 01:38:00 · 405 阅读 · 0 评论 -
HDOJ_1026_Ignatius and the Princess I
<br />///WA两次:第一次未清空队列. 第二次没有考虑到倒数第二步在打怪的情况,缺少少输出。 ////广搜,输出最佳路径///广搜:与以前做的题的情况有点不同,不能根据有没有访问过这一点而决定是否///放弃这个点,即使以前已经访问过,但是还是需要将其考虑,因为以前访问得到的时间///不能保证是最小的,在第二次访问的时候就需要判断时间,若后一次时间少,更新访问到///这一点的最小时间即sc[i][j]中保存的值,并且将这一点再次入栈,若后一次时间多就可以//放弃这个点了。/原创 2010-06-30 18:56:00 · 1147 阅读 · 1 评论 -
POJ_2192_Zipper
<br />////DP,用二维数组来存储每一个状态的结果。ans[i][j]表示s1的前i个字符和s2的前j个字符是否///能组合成merge的前i+j个字符的序列状态,若能则为true,否则为false。///状态转移方程为:ans[i][j]={1|ans[i][j-1]&&merge[i+j]==s2[j],ans[i-1][j]&&merge[i+j]==s1[i]}/// 否则为false。而ans[0][j]表示s1为空串的情况,同理可知ans[i][0]的意义.///通过本题原创 2010-06-27 17:42:00 · 368 阅读 · 0 评论 -
POJ_1017_Packets
<br />///贪心,先装大的箱子,后装小的箱子,在6*6中我是用剩余面积表示是否还能再装入箱子,装6,5,4,都不会///有什么问题,但是装3*3时会对结果有影响,因此轮到装3*3时要特别考虑对2*2的影响,当然对1*1没///多少影响 #include<stdio.h>int packets[7];int main(){ while(1) { int i,end=0; for(i=1;i<7;i++) { scanf("%d",&packets原创 2010-06-27 13:51:00 · 618 阅读 · 0 评论