小奇挖礦 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 若選...