時間限制: 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])
如果是維護性星球也有差不多的遞推式
#includeusingview codenamespace
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;
}
經營與開發
題目 使用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的金錢...