动态规划学习二

来源:互联网 发布:星际淘宝网txt下载 编辑:程序博客网 时间:2024/04/30 12:12
国际象棋中的车可以水平的或竖直的移动,一个车要从一个棋盘的一角移到对角线的另一角,有多少种最短路径?

a,用动态规划算法求解

b,用初等排列组合知识求解


题目参考:http://www.cnblogs.com/brokencode/archive/2011/06/26/2090702.html


B方法高中就知道了,最后结果c[2n][n],编程方法可以参照动态规划学习一  http://blog.csdn.net/midle110/article/details/7471361

这里主要介绍第一种方法

想要得到  a[n][n]  ,反推,由于不能回走,所以a[n][n]只能是a[n-1][n]和a[n][n-1]这两个路径走过来

也就是    a[n][n] = a[n-1][n] + a[n][n-1]


就这样,思路就出来了


#include <iostream>using namespace std;int main(int argc, char* argv[]){int a[104][104];int s;while (cin>>s){memset(a , 0 , sizeof(a));for (int i = 0 ; i <= 100 ; ++i ){a[0][i] = 1 ;a[i][0] = 1 ;}for ( i = 1; i <= 100 ; ++i ){for (int j = 1 ; j <= 100 ; ++j ){a[i][j] =  a[i-1][j] + a[i][j -1 ];}}cout<<a[s][s]<<endl;}return 0;}