DAG 上的動態規劃(訓練指南 大白書)

2022-07-08 19:51:12 字數 1927 閱讀 4419

有向無環圖(dag,directed acyclic graph)上的動態規劃是學習動態規劃的基礎。很多問題都可以轉化為dag上的最長路、最短路或路徑計數問題。

一、矩形巢狀

題目描述:

有n個矩形,每個矩形可以用兩個整數a,b描述,表示它的長和寬。矩形x(a,b)可以巢狀在矩形y(c,d)中當且僅當ad(i) = max

其中e為邊集,最終答案為d(i).那如果要求輸出字典序最小的最長路徑呢?那麼必須找到第乙個最長的路徑的值然後遞迴輸出。

**:

#include#include#include#include#includeusing namespace std ;

const int mx = 1000 + 10 ;

int n ;

int g[mx][mx],dp[mx] ;

struct node

t[mx] ;

void buildgraph() // 建圖

int dag(int x) // 記憶化求解

return ans ;

}void print(int x) // 列印路徑

int ans=1 ;

buildgraph() ;

memset(dp,-1,sizeof(dp)) ;

for(int i=0 ;ians ? mx : ans ;

}for(int i=0 ;i

#include#include#include#define inf 1<<30

#define maxn 100+10

using namespace std ;

int v[maxn],n;

int min[maxn],max[maxn];

inline int min(int a,int b)

//列印可行的方案

void print_ans(int* d,int s)

}}int main()

print_ans(min,s);

printf(" min\n");

print_ans(max,s);

printf(" max\n");

printf("min:%d max:%d\n",min[s],max[s]);

} return 0;

}

分析:本質上市乙個dag上的路徑問題,我們把每種面值看做乙個點,表示還需湊足的面值,則初始狀態為0,目標狀態為0,若當前在i,則每使用一枚硬幣j,狀態轉移到i-vj。

**:

#include#define n 1100

int v[n],min[n],max[n],min_coins[n],max_coins[n];

void print_ans(int *d,int s, int n)

printf("\n");

}int main()

if(max[i](max[i-v[j]]+1)?max[i]:(max[i-v[j]]+1);}}

} printf("%d %d\n",min[s],max[s]);

print_ans(min_coins,s,n);

print_ans(max_coins,s,n);

} return 0;

}

上面的**中,如果不需要輸出路徑的話,則可以不要max_coins和min_coins陣列,下面在寫乙個遞迴的。

#include#include#define n 1100

int v[n],d[n],vis[n];

int dp(int s, int n)

}}int main() {

int t,i,n,s,ans;

scanf("%d",&t);

while(t--) {

scanf("%d %d",&n,&s);

for(i=0;i

DAG上的動態規劃

dag模型 有n個矩形,每個矩形用兩個整數a,b描述,表示長和寬,矩形 a,b 可以巢狀在矩形 c,d 中,當且僅當a小於c,b小於d或b小於c,a小於d。要解決的問題就是從眾多矩形中選出最多的矩形,使其可以按要求排成一列,若有多解,矩形編號的字典序要盡可能小。分析 按照書上的分析很簡單易懂,也容易...

DAG上的動態規劃

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a 輸入 第一行是乙個正正數n 0輸出 每組測試資料都輸出乙個數,表示最多符合條件的矩形數目,每組輸出佔一行 樣例輸入 1 ...

DAG 上的動態規劃

暫存 dag 上的動態規劃 訓練指南 大白書 2015年11月04日 16 42 48 閱讀數 1979 有向無環圖 dag,directed acyclic graph 上的動態規劃是學習動態規劃的基礎。很多問題都可以轉化為dag上的最長路 最短路或路徑計數問題。一 矩形巢狀 題目描述 有n個矩形...