解題報告 hdoj1069(動態規劃)

2021-06-28 10:15:54 字數 753 閱讀 7610

大概題意:猴子想拿到房頂的香蕉,有幾種不同的block可用,每種可用若干個,每種block有三個引數:x,y,z。猴子可以將面積大的放下層,然後再放上乙個面積小的,然後……這樣可以增加最後能達到的高度。但是有個要求:上面的block的長和寬都必須嚴格的小於下面的block。每個block的兩個引數當做長和寬時,另乙個引數做高度用。

狀態方程:dp[i]=max  0<=j

f[j][i]=;

//wa了一次,因為忘記把f初始化。。

//狀態方程沒想好就打上去了,測試資料時又改的。。

//因為每個block三個引數可以兩兩當長或寬的用,所以每次輸入都增加了6個block:

#include#include#include#includeusing namespace std;

int n,ans;

int a,b,c;

struct block;

block block[186];

int dp[186];

int f[186][186];

int max(int x,int y)

bool cmp(block a,block b)

dp[i]=max(dp[i],f[j][i]);

}if(dp[i]>ans) ans=dp[i];

}printf("case %d: maximum height = %d\n",t,ans);

}return 0;

}

動態規劃 hdoj 1087解題報告

hdoj 1087 super jumping jumping jumping 題意大致是求乙個數列的單調遞增子列的和的最大值。資料只有1000,因此隨便dp一下就好。思路 令b 1,n 為數列,a i 為以b i 為最後一項的和最大的子串行。因此有遞推公式 a 0 0 a i max a j b ...

HDOJ1087解題報告 動態規劃

題目概述 求所有的嚴格上公升子串行的最大和。大致思路 有點類似於求最長上公升子串行。用dp解決。令f i 表示前i個數中所有嚴格上公升子串行的最大和,轉移方程為 邊界條件為f i a i 複雜度分析 很容易看出dp的複雜度為o n 總複雜度為o t n 1 include 2 include 3 i...

TYVJ 1069 cowtour 解題報告

usaco原題,做過幾次了,所以一次ac,就是暴搜,因為資料小。先把每個牧區的直徑求出來,然後再把在乙個牧區中距離任意節點的最遠距離算出來,然後暴搜,若i,j之間加一條路,那麼新牧區的半徑要麼就是i所在的牧區的的直徑,要麼是j所在的牧區的直徑,要麼就是i所在的牧區中距i最遠的距離加上j所在的牧區中距...