GDOI2014 採集資源

2022-02-24 23:13:57 字數 2622 閱讀 3393

題目描述

魔獸爭霸3中,戰略資源的採集通過使用農民、苦工、小精靈以及寺僧來進行。

在魔獸爭霸4的開發中,玻璃渣覺得這種模式太過單一,於是他們想新增更多的單位來使採集的模式更加豐富。

在新的模式中,玩家可以建造更多種類的「苦工」,不同的「苦工」的工作效率不同,同時,建造不同的「苦工」所需要的資源也是不一樣的。

玻璃渣出品的遊戲以追求平衡著稱,所以為了測試這種新的模式的平衡性,他們設計了一套檢測的方法:在各種族的起始資源相同時,測量達到某一資源數量的時間,如果相同則可以認為設計是平衡的。

他們將資料給你,希望你能測試出設計是否平衡。

輸入格式

第一行三個數,\(n, m, t\), 表示苦工的種類、開始時擁有的資源數量以及需要達到的資源的數量。

接下來\(n\)行,每行\(2\)個數\(a, b\), 表示生產這種苦工所需要的資源,以及這個苦工的效率,效率即為單位時間內產生的資源的數量。

輸出格式

乙個數字,表示資源數量達到t時的最少時間。

注意:與魔獸爭霸3不同,魔獸爭霸4中,生產苦工不需要時間。並且資源的採集並不連續,亦即如果乙個苦工的效率為\(2\),他會在時間為\(1\)的時候收穫\(2\)點資源,而並不會在時間為\(0.5\)的時候收穫\(1\)點資源。

輸入輸出樣例

輸入 #1

1 1 8

1 1

輸出 #1
4
輸入 #2
2 1 8

1 12 8

輸出 #2
3
資料範圍

對於\(30 \%\)的資料,\(n \le 10, m, t \le 300\)

對於\(100 \%\)的資料,\(n \le100,m, t \le 1000, a, b \le 2^\)

資料保證有解

題意理解

就是有若干類苦力,每乙個苦力有乙個,每秒生產力,和購買需要花費的資源.苦力可以無限購買

初始的時候,你有一些資源,且問你達到目標資源數量的最少時間.

購買苦力是不需要花費時間.

演算法解析

這道題目是極為罕見的兩次dp演算法.

首先我們需要,固定花費\(x\)資源,可以購買最大的生產力為多少.

\[f[x]表示花費x個資源,購買的最大生產力

\]每乙個苦力看作乙個物品

每乙個苦力,可以無限購買

要求固定的資源,購買最大的生產力

其實這個就是完全揹包問題.

然後我們考慮,對於有固定的資源數量,在乙個固定的時間內,所擁有的最大生產力

\[f2[t][x]表示t個時間內,擁有x個資源的最大生產力

\]那麼我們顯然是要,購買生產力

那麼,假設我們花費\(k\)個資源,那麼得到最大多少生產力?

\[f[k]

\]這就是我們上次完全揹包的產物.

那麼下一秒,我們會擁有多少資源呢.

\[w=(j-k)+(f[k])+(f2[i][j]) \\\\下一秒資源=剩餘資源+本次新來生產力製造的資源+原本就有的生產力製造的資源

\]那麼根據本次推導,下一秒最大生產力為多少呢?

\[f2[i+1][w]=max(f2[i+1][w],f[k]+f2[i][j]);

\]既然如此,我們就成功的推導出來了,第二次的線性動態規劃演算法.

**解析

#include using namespace std;

const int n=1100;

int a[n],b[n],f[n],f2[n][n],n,m,ed;

inline void init()

memset(f,-1,sizeof(f));//消耗j點資源,可以得到的最大生產力

f[0]=0;

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

for(int j=a[i]; j<=1000; j++)//完全揹包轉移

if (f[j-a[i]]!=-1)

f[j]=max(f[j],f[j-a[i]]+b[i]);

memset(f2,-1,sizeof(f2));//-1是為了處理是否擁有這麼多資源

f2[0][m]=0;//初始化,f2[i][j]表示i單位時間後剩下j資源能擁有的最大生產力。

for(int i=0; i<=1000; i++)//i時刻

for(int j=0; j<=ed; j++)//當前擁有j點資源

f2[i+1][w]=max(f2[i+1][w],f[k]+f2[i][j]);//本次購買生產力+原本擁有的生產力

}} }

}signed main()

GDOI2014模擬 網格

description 某城市的街道呈網格狀,左下角座標為a 0,0 右上角座標為b n,m 其中n m。現在從a 0,0 點出發,只能沿著街道向正右方或者正上方行走,且不能經過圖示中直線左上方的點,即任何途徑的點 x,y 都要滿足x y,請問在這些前提下,到達b n,m 有多少種走法。輸入檔案中僅...

GDOI2014模擬 雨天的尾巴

給出乙個n個節點的樹和m次操作,每次操作把x到y的路徑上的所有的點的z種物品 1.求最後每個點最多的物品編號。若有多個相同的取編號小的,若沒有則輸出0.n,m 10 5,z 10 9 include include include include include define fo i,a,b fo...

GDOI2014模擬 伺服器

我們可以從n個數中選擇一些,選擇第i個數的代價為ci,且必須選擇n。對於每個沒有被選擇的數i,若它右邊離它最近的乙個被選擇的數是j,則代價為j i。求最小代價。n 10 6 n 2dp還是很顯然的。設fi表示i必須選,且i的右邊已經搞定了的最小代價,那麼fi min fk k i 1 k i 2 c...