MZOJ2007 路燈的改建計畫

2021-07-06 05:08:55 字數 1358 閱讀 3945

【問題描述】

一天晚上,我們資訊學競賽班的sfj 同學正往校門外走,忽然眼前一片漆黑,於是直

接把眼鏡都摔掉了,再也找不到。後來sfj 同學從學校管理處了解到昨晚路燈突然熄滅是

因為電路不堪重負,導致空氣開關跳閘。

sfj同學仔細了解每盞路燈的耗電量a[i]與照明度z[i],已知共有n 盞電燈,並且

每盞電燈都可能有不同的耗電量與照明度,現在的問題是要把這n盞電燈分為m 組,新分

出的每組燈的耗電量(即是該組所有開啟電燈的耗電量之和)不能超過該組的電燈數目的t

倍,在滿足這樣的前提下使得照明度盡可能的大,最後算出m 組的最大照明度的和。由於

每組耗電量的限制,該組中的某些電燈可能不被使用,但是仍然應該算作該組燈的數目。

特別注意的是電燈按順序給出,只能把相鄰的幾盞燈分在一組。

由於計算較為複雜,sfj 同學經過反覆的計算仍然不能確定結果,現在就請你為他編寫

乙個程式來解決這個問題。

【輸入檔案】

light.in 檔案中共有n+1 行,第一行三個整數分別為n,m,t 接下來的n 行每行兩

個整數,分別為a[i]與z[i],所有資料之間以乙個空格分開。

【輸出檔案】

light.out 檔案僅包含乙個數,即輸出m組的最大照明度的和。

【輸入樣例1】

2 1 2

2 13 2

【輸出樣例1】

2【輸入樣例2】

5 2 2

1 12 2

3 34 4

5 5【輸出樣例2】

10【資料規模】

對於70%的資料,保證有2<=n<=80,1<=m<=35,1<=t,a[i],z[i]<=35;

對於全部的資料,保證有2<=n<=160,1<=m<=50,1<=t,a[i],z[i]<=50。

揹包dp:

#include//dp

#include#includeusing namespace std;

const int maxn=200;

int n,m,t;

int a[maxn],z[maxn];

int f[maxn*50];//耗電量為x時的照明度

int f2[maxn][maxn];//第i個到第j個的照明度

int ans[maxn][maxn];//前i個分為j個部分的和的最大值

int main()

for(int i=1;i<=n;i++)

for(int k=0;k<=(j-i+1)*t;k++)

}} for(int i=1;i<=n;i++)

{ for(int j=1;j<=min(i,m);j++)

{ for(int k=j-1;k

MZOJ 2018 03 31 考試隨想

第一道題,先是題看錯了,貪心的時候沒有貪心對,改了1mol,最後才改對,預計正常用時20min。1 include2 include3 include4 include5 include6 using namespace std 78 const int maxn 10000 10 9 const ...

MZOJ 1063 士兵守衛

bob特別喜歡戰略遊戲,但有時他不能盡快找到最優解,所以他就很傷心。現在他又有乙個問題,他必須保衛乙個中世紀的城市,這個城市的道路形成了一棵樹。他需要在樹的節點上放最少的士兵來觀察所有的邊。你能幫助他麼?例如下圖就只需要乙個士兵放在1號節點。輸入檔案中有多組資料,每組資料的第一行n表示點的個數。接下...

時間2007驛站

時間一轉就到了農曆的2007年了,豬年.離開學校也有就一段時間了.2006年畢業,找了個公司上班.先做了一段時間的dba,在那段dba時間中還真學了不少關於sql的東西.給了我乙個成長的機會.在這裡還是很謝謝,重慶軟體科技的同事們.給了我們多的幫助和支援.然後公司要寫個關天vpn的有專案.我接過來了...