摘要: 题目链接简单的搜索题,深搜即可。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #define MAX(a,b) ((a)>(b)?(a):(b)) 4 #define CLR(a) (memset(a,0,sizeof(a))) 5 #define N 101 6 char g[N][N]; 7 int n,m,k,ans,tmp; 8 int dir[4][2]={1,0,0,1,-1,0,0,-1}; 9 void dfs(int i,int j)10 {11 int d,ni,nj;12 g[i 阅读全文
posted @ 2012-04-03 23:04 BeatLJ 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题目链接动态规划题,题目大意,有n个城市,一个人从第一个出发,每天可以选择继续呆在当前城市或者转移到其他城市(可以把继续呆在当前城市看成从当前城市转移到当前城市),第i天呆在第j个城市的收入为in[i][j],从第i个城市转移到第j个城市的费用out[i][j],求m天后的最大收入。把第k天的收入与第k-1天的收入联系起来即可写出状态转移方程。用c[i][j]保存i天过后最后呆在城市j的总收入,c[i][j]=MAX(c[i-1][k]+in[i][j]-out[k][j],k=0,1,...n-1),注意到从第一个城市出发,所以边界为第一天结束时的收入。View Code 1 #inclu. 阅读全文
posted @ 2012-04-03 23:00 BeatLJ 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 题目链接题目的本质就是求最长不下降子序列,这是动态规划的典型,很容易写出O(n2)的算法,但由于MAX=40000,普通算法会超时,必须采用更快的算法。下面简单介绍求最长不下降子序列(可推广到其他类型)的O(nlogn)算法。假设数字序列为a[N](也可不用保存,一边读入一边处理),先介绍如何求以第一个元素开头的最长不下降子序列,我们会用到一个数组d[N],d[k]保存的是数组a中以第一个元素开头的所有长为k的不下降子序列最后一个元素的最小值(下面将简称为最小最后元素),显然d的长度len即为所求。而且容易用反证法证明这个数组是递增的,若存在i<j,且d[i]>d[j],可以这样想 阅读全文
posted @ 2012-04-03 22:31 BeatLJ 阅读(434) 评论(0) 推荐(0) 编辑