//
// main.cpp
// 动态规划走街道
//
// Created by liujan on 11/18/14.
// Copyright (c) 2014 liujan. All rights reserved.
//
/*
问题描述:一个城市的街道布局如下,从最左下 方走到最右上方,每次只能往上或往右走,一 共有多少种走法?
分析:街道有11行11列,我们先给每个交叉点定坐标,最左下方 为(0,0),最右上方为(10,10)。
不难看出子问题就是: 从(0,0)走到(x,y),每次只能往上或往右走,一共有多 少种走法,将这个走法数记为f(x, y),原问题就是求f(10, 10)。
1.走到(x,y)有两个方法,一个是从(x-1,y)往右走1步,另 一个是从(x,y-1)往上走1步, 前者有f(x-1, y)种方法, 后者有 f(x, y-1)种方法, 所以:
f(x, y)=f(x-1, y)+f(x, y-1), 另外当x或y为0的时候, 明显f(x, y)=1,即:
(1)当 x=0或 y =0时, f(x, y)=1
(2)当 x>0且 y>0时, f(x, y) = f(x-1,y) + f(x, y-1)
*/
#include <iostream>
using namespace std;
int f[100][100];
int main(int argc, const char * argv[]) {
int n = 10;
// insert code here...
for (int i = 0; i <= n; i++) { //当如果在左边边缘或下边边缘时,只有一种走法
f[i][0] = 1;
f[0][i] = 1;
}
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
f[i][j] = f[i-1][j] + f[i][j-1];
}
}
cout << f[n][n] << endl;
return 0;
}
动态规划走街道
最新推荐文章于 2024-04-24 16:38:24 发布