摘要: 题目大意:给定一个n*m的只含0和1的矩阵,从矩阵的最后一行中的某个1出发,每步只能走到相邻的且是1的格子中,求能达到的最大高度(最小行数)。这题直接DFS即可,复杂度为O(N*M)。View Code 1 #include <stdio.h> 2 #define MAX(a,b) ((a)>(b)?(a):(b)) 3 #define N 100 4 int dx[4]={0,0,1,-1}; 5 int dy[4]={1,-1,0,0}; 6 char g[N][N]; 7 int n,m,ans; 8 void dfs(int i,int j) 9 {10 int d, 阅读全文
posted @ 2012-04-24 20:17 BeatLJ 阅读(287) 评论(2) 推荐(0) 编辑
摘要: 题目链接贪心题,也是训练优先队列的好题。题目大意:给一块长木板,现要将其锯成n段,共需锯n-1次,每次锯的代价为所锯木板的长度,求最小总代价。其实也可以看成是把n段木板拼成一块,每次拼的代价为所拼木板的长度和。这就跟哈夫曼编码一样,每次选取两个最小的来拼。具体实现时用优先队列。View Code 1 #include <stdio.h> 2 #include <queue> 3 using namespace std; 4 #define INF 0x7fffffff 5 priority_queue<int,vector<int>,greater&l 阅读全文
posted @ 2012-04-24 15:05 BeatLJ 阅读(742) 评论(0) 推荐(0) 编辑
摘要: 题目链接有限制的单源最短路。题目大意:给定一个图,图中的每条边有一个长度和一个费用,给出最大费用,求在不超过最大费用的前提下的最短路(从s到e)。我的解法是BFS+优先队列,我们可以把<d,t,i>看成状态,i为结点编号,d为结点到源点的距离,t为目前剩余的费用,每次BFS时都选取d最小的状态进行扩展,直到到达目标结点。一开始,我还担心内存会爆掉,但是一下也没想到其他方法,就照这个想法写了,结果居然AC了。由于要用到优先队列,所以只好临时学了一点STL,第一次提交是忘改用c++提交,CE了一次。View Code 1 #include <stdio.h> 2 #incl 阅读全文
posted @ 2012-04-24 13:54 BeatLJ 阅读(312) 评论(0) 推荐(0) 编辑