动态规划算法--理解

一、含义

动态规划:多阶段(两段)最优化决策解决问题的过程就称为动态规划。

二、基本步骤

1、描述优解的结构特征。 

2、递归地定义一个最优解的值。 

3、自底向上计算一个最优解的值。

4、从已计算的信息中构造一个最优解。

三、何时采用动态规划

(1) 最优化原理:问题的最优解包含的字问题也有最优解,就称该问题具有最优子结构,满足最优化原理。

(2)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(处理重叠子问题是动态规划的优势所在)

四、例题

单调递增最长子序列

设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。

输入格式:

输入有两行: 第一行:n,代表要输入的数列的个数 第二行:n个数,数字之间用空格格开。

输出格式:

最长单调递增子序列的长度。

输入样例:

5
1 3 5 2 9

输出样例:

4

代码:

 

 1      int[] a = new int[100];
 2      int []dp =new int[100]; 
 3      int n;
 4      Scanner inputScanner = new Scanner(System.in);
 5         n = inputScanner.nextInt();
 6         for (int i = 0; i < n; i++) {
 7             a[i] = inputScanner.nextInt();
 8         }
 9         for (int i = 0; i < dp.length; i++) {
10              dp[i] = 1;
11         }
12         int max =0;
13         for (int i = 1; i < a.length; i++) {
14             for (int j = 0; j <= i; j++) {
15                 if (a[i]>a[j]) {
16                     dp[i] = Math.max(dp[i], dp[j]+1);//更新max
17                     max=dp[i];
18                 }    
19             }
20         }
21         System.out.println(max);
22         inputScanner.close();

 

 租用游艇问题

长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1<=i<j<=n。试设计一个算法,计算出从游艇出租站1 到游艇出租站n所需的最少租金。

输入格式:

第1 行中有1 个正整数n(n<=200),表示有n个游艇出租站。接下来的第1到第n-1 行,第i行表示第i站到第i+1站,第i+2站, ... , 第n站的租金。

输出格式:

输出从游艇出租站1 到游艇出租站n所需的最少租金。

输入样例:

3
5 15
7

输出样例:

12

代码:

 

#include <iostream>
using namespace std;

int main(){
    int a[100][100];
    int i=0,j=0,k,n;
    cin>>n;
    for(i=1;i<n;i++) {
        for(j=i+1;j<=n;j++) {
            cin>>a[i][j];
        }
    }
    for(i=2;i<n;i++){
        for (j=i+1; j<=n; j++) {
            k = j-i;//表示从第K站到第j站找一站p使得a[k][p]+a[p][j]最小。
for (int p=k; p<j; p++) {
                if (a[k][p]+a[p][j]<a[k][j]) {
                    a[k][j]=a[k][p]+a[p][j];
                }
            }
        }
    }
    cout<<a[1][n]<<endl;
    return 0;
}

 

posted @ 2018-10-25 19:03  Adom_ye  阅读(558)  评论(0编辑  收藏  举报