小奇挖礦 2 題解

2021-08-29 10:21:13 字數 1978 閱讀 4430

小奇挖礦 2

題目:

題目背景:

小奇飛船的鑽頭開啟了無限耐久+精準採集模式!這次它要將原礦運到泛光之源的礦石交易市場,以便為飛船公升級無限非概率引擎。

問題描述:

現在有m+1個星球,從左到右標號為0到m,小奇最初在0號星球。

有n處礦體,第i處礦體有ai單位原礦,在第bi個星球上。由於飛船使用的是老式的跳躍引擎,每次它只能從第x號星球移動到第x+4號星球或x+7號星球。每到乙個星球,小奇會採走該星球上所有的原礦,求小奇能採到的最大原礦數量。注意,小奇不必最終到達m號星球。

輸入格式:

第一行2個整數n,m。

接下來n行,每行2個整數ai,bi。

輸出格式:

輸出一行乙個整數,表示要求的結果。

樣例輸入:

3 13

100 4

10 7

1 11

樣例輸出:

101樣例解釋:

第一次從0到4,第二次從4到11,總共採到101單位原礦。

資料範圍:

對於20%的資料 n=1,m<=10^5

對於40%的資料 n<=15,m<=10^5

對於60%的資料 m<=10^5

對於100%的資料 n<=105,m<=109,1<=ai<=10^4,1<=bi<=m

知識點:dp、乙個類似於離散化的東西

講解:

這一題想必大家都可以拿到60分 (然而博主才20分 ),先將一下60分的思路,我們採用dp,我們定義dp[i]表示到i這個星球可以獲得的最大原礦,很容易相處狀態轉移方程,dp[i]=max(dp[i-4],dp[i-7])+a[i],a[i]表示i這個星球可以獲得的原礦數目。現在唯一的問題就是mle,因為m的值太大所以我們會炸,想一下怎麼解決,我們可以採用離散化(然而我不知道這是不是離散化,沒學過不過感覺很像),我們可以發現n<=100000,我們考慮從n入手,可是轉移的過程又和m有關,我們發現如果兩個星球之間的距離可以分解成幾個4相乘加幾個7相乘那麼這樣就可以轉移,我們通過計算發現在所有數中只有1 2 3 5 6 9 10 13 17這幾個不可以,所以我們特判一下。思路就是我們把所有距離大於17(沒有等於)的全部看成相距18,那麼這樣距離就大大被我們縮短了,我們就可以正常dp了。

**:

#include

#include

#include

using

namespace std;

struct kuang

ac[100100];

bool

cmp(

const kuang x,

const kuang y)

int dp[

2000100

],much[

2000100];

intmain()

sort

(ac+

1,ac+

1+n,cmp)

;//我們排序一下確保星球按照位置排序,方便我們後面處理

for(

int i=

1;i<=n;i++

)for

(int i=

1;i<=now;i++

)//全部初始化

dp[i]=-

1;for(

int i=

0;i<=now;i++

)printf

("%d"

,ans)

;//輸出答案

return0;

}

希望大家都可以ac。

小奇挖礦 Explo

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

NKOJ4270 小奇挖礦2

問題描述 題目背景 小奇飛船的鑽頭開啟了無限耐久 精準採集模式!這次它要將原礦運到泛光之源的礦石交易市場,以便為飛船公升級無限非概率引擎。問題描述 現在有m 1個星球,從左到右標號為0到m,小奇最初在0號星球。有n處礦體,第i處礦體有ai單位原礦,在第bi個星球上。由於飛船使用的是老式的跳躍引擎,每...

小奇挖礦 解題報告

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