經營與開發

2022-05-15 09:54:59 字數 1522 閱讀 3658

時間限制: 1 sec  記憶體限制: 128 mb

題目描述

4x概念體系,是指在pc戰略遊戲中一種相當普及和成熟的系統概念,得名自4個同樣以「ex」為開頭的英語單詞。

explore(探索)

expand(拓張與發展)

exploit(經營與開發)

exterminate(征服)

——維基百科

今次我們著重考慮exploit部分,並將其模型簡化:

你駕駛著一台帶有鑽頭(初始能力值w)的飛船,按既定路線依次飛過n個星球。

星球籠統的分為2類:資源型和維修型。(p為鑽頭當前能力值)

1.資源型:含礦物質量a[i],若選擇開採,則得到a[i]*p的金錢,之後鑽頭損耗k%,即p=p*(1-0.01k)

2.維修型:維護費用b[i],若選擇維修,則支付b[i]*p的金錢,之後鑽頭修復c%,即p=p*(1+0.01c)

注:維修後鑽頭的能力值可以超過初始值(你可以認為是翻修+公升級)

請作為艦長的你仔細抉擇以最大化收入。

輸入第一行4個整數n,k,c,w。

以下n行,每行2個整數type,x。

type為1則代表其為資源型星球,x為其礦物質含量a[i];

type為2則代表其為維修型星球,x為其維護費用b[i];

輸出乙個實數(保留2位小數),表示最大的收入。

樣例輸入

5 50 50 10

1 10

1 20

2 10

2 20

1 30

樣例輸出
375.00

提示

對於30%的資料 n<=100

另有20%的資料 n<=1000;k=100

對於100%的資料 n<=100000; 0<=k,c,w,a[i],b[i]<=100;保證答案不超過10^9

注意是按順序經過每個星球,並且每個星球不是必須要使用的。

考慮dp,如果從前向後dp,則會有後效性,因此考慮從後向前dp

設dp[i]表示從第i個星球開始且初始能力值為1所獲得的最大收入;

如果是資源型星球

有dp[i]=max(dp[i+1],(1-0.01*k)*dp[i+1]+a[i])

如果是維護性星球也有差不多的遞推式

#includeusing

namespace

std;

intmain()

; scanf(

"%d %d %d %d

",&n,&k,&c,&w);

for(int i=0;i)

scanf(

"%d %d

",&a[i],&b[i]);

if(a[n-1]==1)dp[n-1]=b[n-1

];

for(int i=n-2;i>=0;i--)

printf(

"%.2f

",w*dp[0

]);

return0;

}

view code

經營與開發

題目 使用maze i 陣列表示在i星球上的價值的大小,對於type 1的星球,就是開採不開採的問題,對於type 2的星球,就是 挖掘不挖掘的問題,如果從前面開始判決,會對後面的判斷造成 影響,所以從後面來,對於第i個星球一定是從第i 1個星球來的 只需選出較大的值代換即可。include inc...

經營與開發

題目描述 你駕駛著一台帶有鑽頭 初始能力值w 的飛船,按既定路線依次飛過n個星球。星球籠統的分為2類 資源型和維修型 p為鑽頭當前能力值 1.資源型 含礦物質量a i 若選擇開採,則得到a i p的金錢,之後鑽頭損耗k 即p p 1 0.01k 2.維修型 維護費用b i 若選擇維修,則支付b i ...

經營與開發 DP

問題描述 你駕駛著一台帶有鑽頭 初始能力值w 的飛船,按既定路線依次飛過n個星球。星球籠統的分為2類 資源型和維修型。p為鑽頭當前能力值 資源型 含礦物質量a i 若選擇開採,則得到a i p的金錢,之後鑽頭損耗k 即p p 1 0.01k 維修型 維護費用b i 若選擇維修,則支付b i p的金錢...