动态规划走街道

来源:互联网 发布:手机怎么完全清除数据 编辑:程序博客网 时间:2024/06/10 05:58
////  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;}

0 0
原创粉丝点击