DAG上的動態規劃(紫書經典)
阿新 • • 發佈:2018-12-15
一、矩形巢狀問題 1.題目描述 2.程式碼實現
#include<iostream> #include<algorithm> #include<math.h> #include<string> #include<string.h> #include<stdio.h> #include<queue> using namespace std; //二級排序 動態規劃 //矩形巢狀 int dp[1005];//儲存前i位最大上升子序列長度 struct node { int x;//長 int y;//寬 } num[1005]; bool cmp(node a,node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x;//優先排列長度 } int main() { int N; scanf("%d",&N); while(N--) { int n;//矩形個數 scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d%d",&num[i].x,&num[i].y); if(num[i].y<num[i].x) swap(num[i].x,num[i].y); getchar(); } sort(num,num+n,cmp); int max_sum=1;//最大數量 memset(dp,0,sizeof(dp)); dp[0]=1; for(int i=1; i<n; i++) { dp[i]=1; for(int j=0; j<i; j++) { if(num[i].x>num[j].x&&num[i].y>num[j].y) dp[i]=max(dp[i],dp[j]+1); } if(dp[i]>max_sum) max_sum=dp[i]; } printf("%d\n",max_sum); } return 0; }
二、硬幣問題