程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 算法學習 - 動態規劃(DP問題)(C++)

算法學習 - 動態規劃(DP問題)(C++)

編輯:C++入門知識

算法學習 - 動態規劃(DP問題)(C++)


 

動態規劃

動態規劃是運籌學的一個方向,就是把多級最優化問題分解成一系列的單階問題。在不斷增加的過程中,不斷的計算當前問題的最優解。

一般分為如下四個部分:

線性動規:攔截導彈,合唱隊形,挖地雷,建學校,劍客決斗等; 區域動規:石子合並, 加分二叉樹,統計單詞個數,炮兵布陣等; 樹形動規:貪吃的九頭龍,二分查找樹,聚會的歡樂,數字三角形等; 背包問題:01背包問題,完全背包問題,分組背包問題,二維背包,裝箱問題,擠牛奶(同濟ACM第1132題)等;

汽車生產線問題

這個問題是《算法導論》的動態規劃的例題,我自己覺得這道題比較簡單而且典型,所以就解釋下這個題目:

Colonel汽車公司在有兩條裝配線的工廠裡生成汽車。每一條裝配線上有n個裝配站,
兩條生產線上相同位置的裝配站功能相同,但所需時間不同,並且汽車底盤在兩條
裝配線間轉移要花費一定的時間。如下圖所示兩條生產線。
裝配線圖vc+88rWltcTKx6OsztLDx9a709DBvdbWx+m/9qOs0rvW1srH1NrXsMXkz98xyc/KsbzktsyjrNK71tbKx9Ta17DF5M/fMsnPyrG85LbMoaM8L3A+DQo8cD682cjnsanBpsvRy/ejrMyw0MTIpcvjtcO7sKOo0rK+zcrHtd256bXEsOy3qKOpoaPKsbzkuLTU077NyscyXm6jrNXiuPbKx7K7v8m908rctcShozwvcD4NCjxwPtXiuPbKsbryztLDx7XEsOy3qMrHz8i007Xa0ru49s7KzOK/qsq8o6zXsMXkz98xLCAyyc/Wu9PQ0ru49nN0YXRpb26ho8THw7SxyL3PvPK1paOs0ruxyL3Pvs26w8HLoaO1sdPQwb249nN0YXRpb261xMqxuvKjrL7Nyse008nP0ru0zrHIvc+1xL3hufvW0CjSu7j2bGluZSAx1+62zKOs0ru49mxpbmUgMtfutswp1tC8zND4vNPJz7Wxx7BzdGF0aW9utcTWtbzM0PixyL3PoaM8L3A+DQo8cD7L+dLUztLDx7eiz9bKx8O/uPa1scewtcTX7tPFveKjrLa8sPy6rMHLyc/Su7TOtcTX7tPFveKhozwvcD4NCjxoMSBpZD0="代碼">代碼

代碼就是我們從最開始,一直保存當前問題的最優解,然後去求的下一次的最優解。

//
//  main.cpp
//  DP_line
//
//  Created by Alps on 15/4/26.
//  Copyright (c) 2015年 chen. All rights reserved.
//

#include 
using namespace std;

#define NUM 5

int main(){
    int first[NUM];//到裝備站1,i的最短路徑長度
    int second[NUM];//到裝配站2,i的最短路徑長度
    int linef[NUM]; //從1進入的路徑
    int lines[NUM]; //從2進入的路徑
    int a[NUM]; //在裝配站1,i 所需要呆的時間
    int b[NUM]; //再裝配站2,i 所需要呆的時間
    int m[NUM]; //從裝配站1,i-1 到裝配站2,i的時間
    int n[NUM]; //從裝配站2,i-1 到裝配站1,i的時間
    int line[NUM]; //當前最短路經所經過的裝配站
    int f[NUM]; //當前最短路徑長度
    int ea,eb,xa,xb; // ea為進入裝配站1時間,eb為進入2的時間,xa為出裝配站1的時間,xb為出裝配站2的

    scanf(%d %d %d %d,&ea,&eb,&xa,&xb);
    for(int i=0;i

這個代碼比較簡單,精華就是那個for循環了。

測試用例如下:

3 2 3 4
4 3
3 6
6 3
2 3
5 2
2 3
2 4
3 4
4 3

假如有任何建議,歡迎評論。互相學習。謝謝。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved