摘要: 题意:输入首行为N,M (0 < N,M <= 1000)表示东西、南北的格子数,每格100米。Nikanor从格子(1,1)的西南角的家出发,地铁站位于格子(N,M)的东北角。第二行为K(0 <= K <= 100),表示有k个格子允许对角线穿越。以下K行为允许对角线穿越的格子,分别用一对数表示,空格隔开。求Nikanor的家到地铁站的最短路径,四舍五入到整数米。用动态规划:设f[i][j]是出发点到点a[i][j]的最短路径f[i][j] = min(f[i-1][j], f[i][j-1]) + 100 //不能从a[i-1][j-1]到a[i][j]f[i][j 阅读全文
posted @ 2013-03-25 12:00 PegasusWang 阅读(748) 评论(0) 推荐(0)
摘要: 利用在数组长度N很大的情况下能达到压缩存储的作用。一般还是用在DP题目中,因为DP题目是一个自下而上的扩展过程,我们常常用到是连续的解,而每次用到的只是解集中的最后几个解,所以以滚动数组形式能大大减少内存开支。用法:#include <iostream>using namespace std;int d[3];int main(){ d[0] = 1;d[1] = 1; for( int i = 2; i < 100; i++) d[i % 3] = d[(i - 1) % 3] + d[(i - 2] % 3]; cout << d[99 % 3] <&l 阅读全文
posted @ 2013-03-25 11:29 PegasusWang 阅读(262) 评论(0) 推荐(0)