小奇挖礦
【題目背景】
小奇要開採一些礦物,它駕駛著一台帶有鑽頭(初始能力值w)的飛船,按既定路線依次飛過喵星系的n個星球。
【問題描述】
星球分為2類:資源型和維修型。
1.資源型:含礦物質量a[i],若選擇開採,則得到a[i]p的金錢,之後鑽頭損耗k%,即p=p(1-0.01k)
2.維修型:維護費用b[i],若選擇維修,則支付b[i]p的金錢,之後鑽頭修復c%,即p=p(1+0.01c)
(p為鑽頭當前能力值)
注:維修後鑽頭的能力值可以超過初始值
請你幫它決策最大化這個收入
【輸入格式】
第一行4個整數n,k,c,w。
以下n行,每行2個整數type,x。
type為1則代表其為資源型星球,x為其礦物質含量a[i];
type為2則代表其為維修型星球,x為其維護費用b[i];
【輸出格式】
輸出一行乙個實數(保留兩位小數),表示要求的結果。
【樣例輸入】
5 50 50 10
1 10
1 20
2 10
2 20
1 30
【樣例輸出】
375.00
【資料範圍】
對於30%的資料 n<=100
對於50%的資料 n<=1000,k=100
對於100%的資料 n<=100000,0<=k,c,w,a[i],b[i]<=100
保證答案不超過10^9.
因為題目要求依次飛過各星球,所以可以考慮dp。
而這題dp最重要的是:倒著dp(有篇解題報告講得很好:我這裡就講講如何推這個狀態轉移方程吧。
設dp[i]表示i到n的最大收益,若此時倒著dp到第i-1個星球,以資源型星球為例,設i-1個星球的鑽頭能力值為1(這裡是相對能力值,可看作100%),那麼若是選擇不挖,dp[i-1]=dp[i];否則,能力值減少0.01k,同時獲得x[i-1]*1(相對能力值為1)的收益,因為收益受p(能力值)的影響且兩者成正比(因為不管是收益,還是支付,都是x[i]*p的費用),故dp[i]會相對地減少0.01k,即dp[i-1]=dp[i]*(1-0.01k)+x[i-1];故dp方程為:
dp[i-1]=max(dp[i],dp[i]*(1-0.01*k)+x[i-1]);
同理,對於維修型星球,dp方程為:
dp[i-1]=max(dp[i],dp[i]*(1+0.01*k)-x[i-1]);
**如下:
#include
#include
using namespace std;
int n,k,c,w;
double ans;
int x[100001],type[100001];
double dp[100001];
int main()
小奇挖礦 Explo
題目背景 小奇要開採一些礦物,它駕駛著一台帶有鑽頭 初始能力值 w 的飛船,按既定路線依次飛過喵星系的 n 個星球。問題描述 星球分為 2 類 資源型和維修型。1.資源型 含礦物質量 a i 若選擇開採,則得到 a i p 的金錢,之後鑽頭損耗 k 即p p 1 0.01k 2.維修型 維護費用 b...
小奇挖礦 2 題解
小奇挖礦 2 題目 題目背景 小奇飛船的鑽頭開啟了無限耐久 精準採集模式!這次它要將原礦運到泛光之源的礦石交易市場,以便為飛船公升級無限非概率引擎。問題描述 現在有m 1個星球,從左到右標號為0到m,小奇最初在0號星球。有n處礦體,第i處礦體有ai單位原礦,在第bi個星球上。由於飛船使用的是老式的跳...
BZOJ4711 小奇挖礦
題目背景 小奇在喵星系使用了無限非概率驅動的採礦機,以至於在所有星球上都採出了一些礦石,現在它準備建一些礦石倉 庫並把礦石運到各個倉庫裡。問題描述 喵星系有n個星球,標號為1到n,星球以及星球間的航線形成一棵樹。所有星球間的雙向航線的長度都為1。小奇要 在若干個星球建礦石倉庫,設立每個倉庫的費用為k...