摘要: 刚开DIY做这题时以为就是一个简单的BFS题目,后来才知道这是一题记忆化搜索题目,用一个简单的公式就是:记忆化搜索=搜索形式+动态规划的思想;这题的思想就是:先用BFS求出n到任何一点的最短距离(跟迪杰斯特拉一样),这就是利用了动态规划的思想;然后,再用DFS进行搜索,这里就要就行记忆化的搜索,具体就是,如果到该点的最短距离的路的条数已经知道那么就不需要再往下求了。#include<stdio.h>#include<stdlib.h>#include<string.h>constint inf=0x7fffffff;struct node{ int x,y; 阅读全文
posted @ 2011-09-17 09:58 wutaoKeen 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 该题我直接用的暴力搜索,因为之最大只有4*4,这个题最重要的是标记;#include<stdio.h>#include<stdlib.h>int max,map[6][6];int flagx(int i,int j, int n){ int re=0; for( int k=i;k<n;k++ ) { if( map[k][j]=='X' ) break; if( map[k][j]=='.' ) { map[k][j]=i; re++; ... 阅读全文
posted @ 2011-09-06 15:34 wutaoKeen 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 用dfs会超时,而且BFS不剪枝的话也会超时。。。三维搜索。。。搜索题,三维BFS,设定前后上下左右6个方向搜索1.刚开始一直WA,我就一直找不出错误,后来在看这个题时才发现自己犯了个严重的错误,刚开我就把城堡四周赋值为1,后来就没这样初始化了;现在想想吧太不应该了;2、要认清剪枝的重要性,剪枝非常有利于提高代码的效率,就这题而言,若没有if(a+b+c-3>t) {printf("-1\n");continue;}(起点与终点间最短路径大于时间限度),虽然没超时;#include<stdio.h>#include<stdlib.h>struc 阅读全文
posted @ 2011-09-05 14:43 wutaoKeen 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 该题TLE了几次,后来才发现要用奇偶剪纸,如果起点到终点的步数为偶数那么不管你怎样走,步数一定为偶数;#include<stdio.h>#include<stdlib.h>#include<string.h>char map[10][10];int flag,M,N;int d[8]={ -1,0,0,1,1,0,0,-1 };void DFS( int x,int y,int n,int T ){ // printf( "afsad" ); if( flag || n>=T ) return; for( int k=0;k< 阅读全文
posted @ 2011-09-04 11:08 wutaoKeen 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 该题是一道字典树的题目,就是是要你翻译一下,如果你学了字典树就会发现这是一道水体;#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct t{ char num[12]; t *ch[26]; int flag; }tire;tire *empty(){ tire *t=( tire * )malloc( sizeof( tire ) ); for( int i=0;i<26;i++ ) t->ch[i]=NULL; memset( t->num,... 阅读全文
posted @ 2011-09-04 01:28 wutaoKeen 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 该题刚开始用最原始的方法,先筛出质数,再利用X=( p1-1)*( p2-1)*....*( pn-1)*( p1^(q1-1))*( p2^( q2-1))*...*( pn^( qn-1)),我就测试了一下3--3000000发现要好长的时间我就知道这种方法一定会超时;后来看了解题报告,才知道有如下的线性筛选法( 我个人刚开始不太喜欢线性法,因为我与其比较过其他的筛选法,发现并没有那么快,并且还要开那么大的数组,后来发现线性筛选法可以与好多的题目的结合处理特别好,现在也开始钟情它了);在程序中利用欧拉函数如下性质,可以快速求出欧拉函数的值(a为N的质因素)(1) 若(N%a==0 & 阅读全文
posted @ 2011-09-01 14:54 wutaoKeen 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 这题给定的数一定能被N整除,最后要%1000003,那么我们就%1000003*N;这样我们就不要担心数据过大的问题;#include<stdio.h>#include<stdlib.h>int main(){ int T,n,x; __int64 num[40002]; scanf( "%d",&T ); for( int i=1; i<=T; i++ ) { scanf( "%d",&n ); __int64 ans=0,m=1000003; m*=n; num[0]=1; for( int j=1;.. 阅读全文
posted @ 2011-08-31 19:50 wutaoKeen 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 该题要注意的就是每张单子A种类的总和不能大与600,同样B,C类也一样,刚开始我就错了这里,还有注意如果不是A,B,C类的不可以报销;该题就是要把浮点型变成整数这样才能用01背包,这里就只要乘以100就可以了。#include<stdio.h>#include<stdlib.h>#include<string.h>int f[5000024]={0};int DP( int num[],int count, int sum ){ memset( f,0,sizeof( f ) ); for(int i=0;i<count; i++) { for( in 阅读全文
posted @ 2011-08-30 14:16 wutaoKeen 阅读(1831) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<stdlib.h>int Gcd( int a,int b ){ b==0?a:Gcd( b,a%b ); }int main(){ int n,m; while( scanf( "%d%d",&n,&m ),-1!=n&&-1!=m ) { if( 1==Gcd( n,m ) ) printf( "YES\n" ); else printf( "POOR Haha\n" ); } return 0; }该题与HD... 阅读全文
posted @ 2011-08-30 14:10 wutaoKeen 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 该题是是给出前3个数,要么是等差要么是等比,要你求第k个数,这个题关键是用到快速取幂;#include<stdio.h>#include<stdlib.h>long long getq( long long t,int k ){ if( k==1 ) return t; long long q = getq( t,k/2 ); if( k%2 ) { return ( q*q*t )%200907; } else return ( q*q )%200907; }int main(){ ... 阅读全文
posted @ 2011-08-27 20:40 wutaoKeen 阅读(83) 评论(0) 推荐(0) 编辑