NOIP2018模擬賽2018 10 18 輕功

2021-08-29 07:58:24 字數 2096 閱讀 7936

description

題目背景: 尊者神高達進入了基三的世界,作為乙個 mmorpg 做任務是必不可少的,然而跑地圖卻令人十分不爽。好在基三可以使用輕功,但是尊者神高達有些手殘,他決定用梅花樁練習輕功。 題目描述: 一共有 n 個木樁,要求從起點(0)開始,經過所有梅花樁,恰好到達終點 n,尊者神高達一共會 k 種門派的輕功,不同門派的輕功經過的梅花樁數不同,花費時間也不同。但是尊者神高達一次只能使用一種輕功,當他使用別的門派的輕功時,需要花費 w 秒切換(開始時可以是任意門派,不需要更換時間)。由於尊者神高達手殘,所以經過某些梅花樁(包括起點和終點)時他不能使用一些門派的輕功。尊者神高達想知道他最快多久能到達終點如果無解則輸出-1。

input

第一行 n,k,w 接下來 k 行,每行為 ai 和 wi 代表第 i 種輕功花費 vi 秒經過 ai 個木樁。 接下來一行 q 為限制條件數量。 接下來 q 行,每行為 xi 和 ki 代表第 xi 個梅花樁不能使用第 ki 種門派的輕功經過。

output

一行答案即所需最短時間。

sample input

sample input1:

6 2 5

1 13 10

1 12 1

sample input2:

6 2 5

1 13 10

sample output

sample output1:

樣例解釋 1: 先用第二種輕功花費 10 秒到 3,再用 5 秒切換到第一種輕功,最後再用 3 秒時間到 6.一共花費 10+5+3=18 秒

sample output2:

樣例解釋 2:

直接花費 6 秒到 6;

data constraint

20%的資料 n<=20,k<=10,q<=200;

對於另外 20%的資料 w=0

對於另外 20%的資料 q=0

所以資料滿足 n<=500,k<=100,q<=50000,vi<=1e7;

保證資料合法

hint

q:請問第一題可不可以往回跳

a:不可以

–明顯的dp吧

f[i][j]:跳到i木樁,並且最後一次用j輕功跳的最小代價

顯然f[i][j] = min( f[ i - a[j] ][ j ] , f[ i - a[j] ][ k ]+w );

現在只需要處理一下是否能用j輕功跳到i木樁就行了

將j輕功不能跳過的木樁排序

在每個樹樁列舉比較就好了

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

505;

int n,k,w;

int a[maxn]

,v[maxn]

;int q;

vector<

int>no[maxn]

;int c[maxn]

[maxn]

;long

long f[maxn]

[maxn]

,ans;

intmain()

for(

int i=

1;i<=k;i++)}

memset

(f,0x7f

,sizeof

(f))

; ans=f[0]

[0];

for(

int i=

1;i<=k;i++

) f[0]

[i]=0;

for(

int i=

1;i<=n;i++)}

}for

(int i=

1;i<=k;i++

) ans=

min(ans,f[n]

[i]);if

(ans==f[0]

[0])

cout<<-1

;else

cout

}

NOIP2018模擬賽2018 10 18 開荒

description 題目背景 尊者神高達作為乙個萌新,在公升級路上死亡無數次後被乙隻大黃嘰帶回了師門。他加入師門後發現有無窮無盡的師兄弟姐妹,這幾天新副本開了,尊者神高達的師門作為乙個 pve師門,於是他們決定組織一起去開荒。題目描述 師門可以看做以 1 為根的一棵樹,師門中的每乙個人都有一定的...

NOIp2018模擬賽三十六

好久沒打模擬賽了。今天一樣是兩道國集,一道bzoj題 成績 13 0 95 108 a題開始看錯題了。導致樣例都沒看懂,結果xfz提醒我後我理解了乙個我自認為正確的題意 事實證明我和xfz都錯了qwq 然後瞎打了乙個線段樹,結果只有13分。c題一看就是乙個大平衡樹,開始手打了100 行發現自己肯定調...

NOIP2018 信心賽 雞腿

波波手上有許多校慶時分發的雞腿券,他決定用玩遊戲的方式來分配這些雞腿券。已知波波會給出乙個 的 棋盤,並且他會在棋盤的左上角 1,1 處放置乙個棋子。兩名雞腿競爭者 和 將輪流移動棋子,每一回合 選手只能向上 下 左 右四個方向使棋子移動一步。為了使遊戲盡快結束波波還規定不能重複經過已經經過的格 子...