時間限制:4000ms 單點時限:2000ms 記憶體限制:256mb
描述 在二次元中,金字塔是乙個底邊在x軸上的等腰直角三角形。
你是二次元世界的乙個建築承包商。現在有n個建造訂單,每個訂單有乙個收益w,即建造此金字塔可獲得w的收益。對每個訂單可以選擇建造或不建造。
建造乙個金字塔的成本是金字塔的面積,如果兩個或多個金字塔有重疊面積,則建造這些金字塔時重疊部份僅需建造一次。
建造一組金字塔的總利潤是收益總和扣除成本。現給出這些訂單,請求出最大利潤。
輸入 輸入資料第一行為乙個整數t,表示資料組數。
每組資料第一行為乙個整數n,表示訂單數目。
接下來n行,每行三個整數x, y, w,表示乙個訂單。(x, y)表示建造出的金字塔的頂點,w表示收益。
輸出 對於每組資料輸出一行」case #x: y」,x表示資料編號(從1開始),y表示最大利潤,四捨五入到小數點後兩位。
資料範圍
1 ≤ t ≤ 20
0 ≤ w ≤ 107
小資料1 ≤ n ≤ 20
0 ≤ x, y ≤ 20
大資料1 ≤ n ≤ 1000
0 ≤ x, y ≤ 1000
樣例輸入
3 2
2 2 3
6 2 5
3 1 1 1
2 2 3
3 3 5
3 1 1 1
2 2 3
3 3 6
樣例輸出
case #1: 1.00
case #2: 0.00
case #3: 1.00
2.解題思路:很顯然的動態規劃問題,類似於揹包問題,故本題利用區間dp解決。本題要求這些訂單中的最大收益。首先可以知道,為了包含整個三角形,我們關注點放在三角形最右邊點。因此,對於所有的三角形,用狀態(l,r,w)來描述它。
接下來,定義d(j)表示區間[0,j]上收益的最大值。事先我們要統計出最大邊界lim,這樣j的變化範圍就是0≤j≤lim。下面考慮如何尋找狀態轉移方程。
(1)當j≥x[i].r且時,表示第i個三角形完全包括在[0,j]之間,取建造它與不建造它收益的較大者。即d(j)=max;
(2)當不滿足(1)時但j≥x[i].l時,我們關注的是x[i].r處的收益最大值,畫圖後容易知道,收益增加值是建造第i個金字塔的收益w減去多建設的面積,即s(x[i].l,x[i].r)-s(x[i].l,j)。即得到如下狀態轉移方程:d(x[i].r)=max;
(3)當前兩個均不滿足時,狀態轉移方程其實和(2)類似,即d(x[i].r)=max;
最後,不要忘記一種特殊情況:只建造第i個金字塔時候的收益,因此最後還要取上述計算出的收益和只建造第i個金字塔收益的較大者。
當所有區間的收益最大值計算完畢後,答案就是他們中的最大值。注意事先要把d(j)都初始化為無窮小,表示沒有計算過。
#define _crt_secure_no_warnings
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
double dp[2100];//dp[j]表示[0,j]範圍內的最大收益
struct atomx[1100];
int n;
int compare(atom k1, atom k2)
double solve()
; lim = max(lim, k1 + k2);
}sort(x + 1, x + n + 1, compare);//按照左邊界由小大到
for (int i = 0; i <= lim; i++) dp[i] = -1e18;//初始化為無窮小
for (int i = 1; i <= n; i++)
double ans = 0;
for (int i = 0; i <= lim; i++) ans = max(ans, dp[i]);//取所有範圍中的最大者
return ans;
}int main()
return
0;}
程式設計之美初賽第一場
時間限制 12000ms 單點時限 6000ms 記憶體限制 256mb a市是乙個高度規劃的城市。可是科技高階發達的地方,居民們也不能忘記運動和鍛鍊,因此城市規劃局在設計a市的時候也要考慮為居民們建造乙個活動中心。方便居住在a市的居民們能隨時開展運動。鍛鍊強健的身心。城市規劃局希望活動中心的位置滿...
2014程式設計之美初賽第一場
時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 一般來說,我們採用針孔相機模型,也就是認為它用到的是小孔成像原理。在相機座標系下,一般來說,我們用到的單位長度,不是 公尺 這樣的國際單位,而是相鄰畫素的長度。而焦距在相機座標系中的大小,是在影象處理領域的乙個非常重要的物理量。...
程式設計之美初賽(第一場) 焦距
時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 一般來說,我們採用針孔相機模型,也就是認為它用到的是小孔成像原理。在相機座標系下,一般來說,我們用到的單位長度,不是 公尺 這樣的國際單位,而是相鄰畫素的長度。而焦距在相機座標系中的大小,是在影象處理領域的乙個非常重要的物理量。...