1. 程式人生 > >noip模擬賽 經營與開發

noip模擬賽 經營與開發

blog class 開發 沒有 -s noi 輸出格式 資源 系統

題目描述

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位小數),表示最大的收入。

輸入輸出樣例

輸入樣例#1:
5 50 50 10
1 10
1 20
2 10
2 20
1 30
輸出樣例#1:
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,但是如果設f[i]為1~i的最大收益的話,顯然鉆頭的能力值有後效性,那麽怎麽辦呢?假設f[i]為i~n的最大收益,如果i選了,那麽受影響的就是i+1,假設我們預先知道i+1受影響後的值,我們就能推出i的值了,就沒有後效性了.

如果一個dp題i對i以後的所有點都有後效性,那麽可以考慮反過來做.

#include<cstdio>
#include<algorithm>

using namespace std;

const int maxn = 100010;
int n, w, t[maxn], a[maxn];
double
k, c, ans; int main() { scanf("%d%lf%lf%d", &n, &k, &c, &w); k = 1 - 0.01*k; c = 1 + 0.01*c; for (int i = 1; i <= n; i++) scanf("%d%d", &t[i], &a[i]); for (int i = n; i; i--) if (t[i] == 1) ans = max(ans, ans*k + a[i]); else ans = max(ans, ans*c - a[i]); printf("%.2lf\n", ans*w); return 0; }

noip模擬賽 經營與開發