http://blog.youkuaiyun.com/hackbuteer1/article/details/7581353
http://topic.youkuaiyun.com/u/20120513/20/f6d48eeb-55f5-4d78-8fc0-0dea165c00df.html
4、一条路有k可坑,每次能跳平方数步长(1 4 9 16。。),不能跳到坑里,从a跳到b最少几步?(动态规划题)
动态转移方程
f(n) = min( f(大于n的第一个平方数 -n) ,f(n- 小于n的第一个完全平方数) +1 )
【 补充 ing
在一个坐标轴上, 给定两个点,一个起点,一个终点,起点有一个方块,方块可以左右移动,但是移动的长度只能是平方数长(1,4,9,16 ••••) ,同时坐标轴上还有洞,移动的过程中不能越过这个洞,不然会掉下去,问 由起点到终点 至少需要多少次移动,不能到达返回-1】
C/C++ code
int f(int n) { if(n ==1) return 1; if(n == 2) return 2; int re = (int)sqrt(1.0*n); if(re*re == n) return 1; int l = re ; int r = re + 1; return min(f(r*r -n) ,f(n- l*l) ) + 1; } int getMinStep(int startPos ,int endPos , int *holePos ,int size) { int i ; for( i = 0 ; i < size ; i ++) { if( (startPos - holePos[i]) * (endPos - holePos[i]) < 0 ) return -1; } int n = abs(endPos - startPos);
printf("%d",f(n));
}