poj 1948 dp(組成面積最大的三角形)

2021-07-05 13:50:24 字數 961 閱讀 2254

題意:給定n(n<=40)個木棍的長度(長度<=40),現在要求將所有的木棍都用上,求能圍成的最大的三角形的面積。

思路:首先有了三角形的三邊長,求面積顯然用海**式。其次要考慮怎麼組成三角形,想了半天覺得複雜度都會超。後來看題解,發現做法基本都是o(n*sum*sum)即o(40*800*800)的,按說一分鐘的時限應該是會超的。反正如果是這樣就好寫了。dp[i][j]表示用邊長i和j(其餘乙個的邊長也就固定了)能否組成三角形。dp只維護左下三角形。最後把能夠組成三角形的方案掃一遍求面積即可。

#include #include #include #include #include #include using namespace std;

#define inf 0x3fffffff

#define clr(s,t) memset(s,t,sizeof(s))

#define n 45

int s[n],n,p,dp[805][805],sum=0;

int res=0;

int check(int x,int y)

double area(int x,int y)

int main()

p = sum;

sum >>= 1;

clr(dp, 0);

dp[0][0] = 1;

for(k = 1;k<=n;k++)

for(i = sum;i>=0;i--)

for(j = i;j>=0;j--)

if(dp[i][j])

for(i = 1;i<=sum;i++)

for(j = 1;j<=i;j++)

if(dp[i][j])

res = max(res,(int)(100*area(i,j)));

printf("%d\n",res?res:-1);

return 0;

}

dp 最大子矩陣面積

在乙個平面內隨機出現一些連續的區域,以這些區域構成乙個矩形,求最大的矩形面積。解決這一類問題的思路是 列舉所有高度,通過記憶化記錄左右側最遠能到達的區域。以下以乙個類似柱狀圖的模型來說明 要求求出圖中最大的矩形面積。圖中存在四個不同的高度。高度1左右都沒有更高的,記l1 1,r1 1 高度2是最低的...

POJ2104 最大矩形面積 單調棧

題目是英文的 這裡簡單描述一下,就是給你n個寬度1的矩形,然後連在一排,求新組成的圖形中的最大矩形.單調棧維護乙個高度單調遞增的棧,每個新數經來的時候要是比棧頂元素小的話就彈出棧頂元素直到不能再彈為止.過程中更新答案。最後清棧更新答案.include include define dnt long ...

poj 2559 最大矩形面積(單調棧)

題目 輸入乙個整數n,代表有n個 1 寬度 h i 高度 的矩形。接下來n個數依次給定乙個矩形高度的高度h i i n 求 在給定的依次排列的這堆矩形構成的圖形裡用乙個矩形圈出最大的乙個矩形,求該最大矩形面積。include include include using namespace std t...