問題描述
你駕駛著一台帶有鑽頭(初始能力值w)的飛船,按既定路線依次飛過n個星球。輸入格式星球籠統的分為2類:資源型和維修型。(p為鑽頭當前能力值)
資源型:含礦物質量a[i],若選擇開採,則得到a[i]p的金錢,之後鑽頭損耗k%,即p=p(1-0.01k)
維修型:維護費用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首先說一下o(另有20%的資料 n<=1000;k=100
對於100%的資料 n<=100000; 0<=k,c,w,a[i],b[i]<=100;保證答案不超過10^9
n3) 的暴力做法:定義f
[i][
j][k
] 表示討論完第i個數,維修j次,開採k次所能得到的最大收入。那麼顯然有狀態轉移方程:f[
i][j
][k]
=max
(f[i
−1][
j][k
],f[
i−1]
[j][
k−1]
+a[i
]∗p)
,typ
e[i]
=1 f
[i][
j][k
]=ma
x(f[
i−1]
[j][
k],f
[i−1
][j−
1][k
]−b[
i]∗p
),ty
pe[i
]=2
其中p為該狀態下的鑽頭能力值。f[
0][0
][0]
=0。然而這樣只能得30分。考慮o(
n)或者是o(
nlog
n)的做法。
事實上,這道題的正解有點費用提前計算的感覺。其實也是乙個常見的思路:如果正著討論不夠優秀或者難以討論,考慮倒著討論。注意到如果把答案列式計算下來,可以發現乙個乘法分配率的形式,因為每次操作對
p 的改變都是乘上乙個數。所以,如果定義f[
i]為處理完區間[i
,n] 的星球得到的最大收入,那麼有:f[
i]=m
ax(f
[i+1
],(1
−0.01k)
∗f[i
+1]+
a[i]
),ty
pe[i
]=1
f[i]
=max
(f[i
+1],
(1+0.01c)
∗f[i
+1]−
b[i]
),ty
pe[i
]=2
最後的答案就是w∗
f[1]
,時間複雜度o(
n)。
#include
#include
#define maxn 100005
using
namespace
std;
int n,ty[maxn];
double k,c,w,v[maxn],f[maxn];
int main()
printf("%.2lf",w*f[1]);
}
經營與開發
題目 使用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 ...
經營與開發
時間限制 1 sec 記憶體限制 128 mb 題目描述 4x概念體系,是指在pc戰略遊戲中一種相當普及和成熟的系統概念,得名自4個同樣以 ex 為開頭的英語單詞。explore 探索 expand 拓張與發展 exploit 經營與開發 exterminate 征服 維基百科 今次我們著重考慮ex...