vijos 1240 樸素的網路遊戲

2021-06-22 21:05:26 字數 1501 閱讀 7746

**

佳佳最近又迷上了某款類似於虛擬人生的網路遊戲。在遊戲中,佳佳是某旅行團的團長,他需要安排客戶住進旅館。旅館給了佳佳的旅行團乙個房間數的限制。每乙個房間有不同的容納人數和價錢(這個**是房間的總**,不是每個人付的)。佳佳決定找到最小的花費,安排參加旅行的人住在這裡。但是他遇到了這麼乙個問題:兩個不同性別的人不能住在同乙個房間裡,除非他們是夫妻;一對夫妻如果在一起住,那麼別的人就不能再住進去。你不必讓所有的夫妻都單獨住在一起。也就是說:

1.給你一些房間,告訴你這些房間的容納人數和**

2.安排一定數量的人住到旅館裡,滿足:

a.不同性別的人如果不是夫妻那麼不能住一起。

b.夫妻如果住在一起,那麼房間不能安排其他的人進去。

你來寫乙個程式幫助佳佳找到安排這些來參加旅行的人住進旅館所需要的最小花費。

第一行有4個用空格隔開的整數m,f,r,c,分別表示參加旅行的男性人數、參加旅行的女性人數、旅館的房間數、這些男女中有多少對夫妻。注意每乙個人不是單身就是和他/她唯一的妻子/丈夫一起參加旅行。

接下來有r行,每行描述了乙個房間。每行有兩個整數bi,pi,它們分別表示每乙個房子的容納人數和**(無論住多少人,房間的**不變)。

對於30%的資料,0<=m,f,r<=50;

對於100%的資料,0<=m,f,r<=300,0<=c<=min(m,f),0<=bi,pi<=10。

輸出為旅行的人訂購房間所需要的最小花費。如果沒有這樣的安排,請輸出「impossible」代替。

c++1

2

3

4 21313

5 2

10 2

4

c++1

9

易知最多只能有一對夫婦乙個房間

設f[i,j,k,0]表示前i個房間住j名男性k名女性並且沒有夫婦住在一起的最小花費

f[i,j,k,1]表示前i個房間住j名男性k名女性並且有一對夫婦住在一起的最小花費 則

f[i,j,k,0]=min(f[i-1,j,k,0],f[i-1,j-v[i],k,0]+p[i],f[i-1,j,k-v[i],0]+p[i])

f[i,j,k,1]=min(f[i-1,j,k,1],f[i-1,j-v[i],k,1]+p[i],f[i-1,j,k-v[i],1+p[i],f[i-1,j-1,k-1,0]+p[i])

約束條件很多要小心。

#include#includeusing namespace std;

int b[301],p[301];

int dp[601][601][2];

int main()

}int ans=9999999;

ans=min(dp[m-1][f-1][1],dp[m][f][0]);

if(ans!=9999999)cout<

Vijos1240 樸素的網路遊戲

佳佳最近又迷上了某款類似於虛擬人生的網路遊戲。在遊戲中,佳佳是某旅行團的團長,他需要安排客戶住進旅館。旅館給了佳佳的旅行團乙個房間數的限制。每乙個房間有不同的容納人數和價錢 這個 是房間的總 不是每個人付的 佳佳決定找到最小的花費,安排參加旅行的人住在這裡。但是他遇到了這麼乙個問題 兩個不同性別的人...

裝箱問題 vijos

有乙個箱子容量為v 正整數,o v 20000 同時有n個物品 o n 30 每個物品有乙個體積 正整數 要求從 n 個物品中,任取若千個裝入箱內,使箱子的剩餘空間為最小。第一行,乙個整數,表示箱子容量 第二行,乙個整數,表示有n個物品 接下來n行,分別表示這n個物品的各自體積。乙個整數,表示箱子剩...

vijos 積木城堡

恰似今天更了七章 我該怎麼辦 看上去好像只能瘋狂寫揹包啦 他們說周四化學通練,我好慌 描述 第一行是乙個整數n n 100 表示一共有幾座城堡。以下n行每行是一系列非負整數,用乙個空格分隔,按從下往上的順序依次給出一座城堡中所有積木的稜長。用 1結束。一座城堡中的積木不超過100塊,每塊積木的稜長不...