日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5907. 【NOIP2018模拟10.16】轻功(qinggong)

發(fā)布時(shí)間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5907. 【NOIP2018模拟10.16】轻功(qinggong) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

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

Input

第一行 n,k,W
接下來(lái) k 行,每行為 ai 和 wi 代表第 i 種輕功花費(fèi) vi 秒經(jīng)過(guò) ai 個(gè)木樁。
接下來(lái)一行 Q 為限制條件數(shù)量。
接下來(lái) Q 行,每行為 xi 和 ki 代表第 xi 個(gè)梅花樁不能使用第 ki 種門(mén)派的輕功經(jīng)過(guò)。

Output

一行答案即所需最短時(shí)間。

Sample Input

Sample Input1:

6 2 5
1 1
3 10
2
1 1
2 1

Sample Input2:

6 2 5
1 1
3 10
0

Sample Output

Sample Output1:

18

樣例解釋 1:

先用第二種輕功花費(fèi) 10 秒到 3,再用 5 秒切換到第一種輕功,最后再用 3 秒時(shí)間到 6.一共花費(fèi) 10+5+3=18 秒

Sample Output2:

6

樣例解釋 2:

直接花費(fèi) 6 秒到 6;

Data Constraint

20%的數(shù)據(jù) n<=20,k<=10,Q<=200;
對(duì)于另外 20%的數(shù)據(jù) W=0
對(duì)于另外 20%的數(shù)據(jù) Q=0
所以數(shù)據(jù)滿足 n<=500,k<=100,Q<=50000,vi<=1e7;
保證數(shù)據(jù)合法

Hint

Q:請(qǐng)問(wèn)第一題可不可以往回跳
A:不可以

Solution

  • 這題簡(jiǎn)單dp即可。

  • 設(shè) f[i][j]f[i][j]f[i][j] 表示走到第 iii 個(gè)木樁、最后一次使用的武功為 jjj 的最短時(shí)間。

  • 初值為 f[0][0]=0f[0][0]=0f[0][0]=0 ,答案為 min(f[n][i])min(f[n][i])min(f[n][i])

  • 枚舉 i、ji、jij 以及接下來(lái)要用的武功 lll ,轉(zhuǎn)移即可。

  • 因?yàn)檗D(zhuǎn)移時(shí)一段區(qū)間都要允許該武功,所以我們可以用一個(gè)前綴和數(shù)組記錄區(qū)間的某一武功的允許情況。

  • 復(fù)雜度 O(nk2)O(nk^2)O(nk2) ,優(yōu)化一下就能為 O(nk)O(nk)O(nk) 了。

Code

#include<cstdio> #include<cstring> #include<cctype> using namespace std; typedef long long LL; const int N=505,K=105; int a[K],v[K],pre[N][K]; LL f[N][K]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } inline LL min(LL x,LL y) {return x<y?x:y; } int main() {freopen("qinggong.in","r",stdin);freopen("qinggong.out","w",stdout);int n=read(),k=read(),W=read();for(int i=1;i<=k;i++) a[i]=read(),v[i]=read();int q=read();while(q--){int x=read(),y=read();pre[x][y]++;}for(int i=1;i<=n;i++)for(int j=1;j<=k;j++) pre[i][j]+=pre[i-1][j];memset(f,60,sizeof(f));LL ans=f[0][1];f[0][0]=0;for(int i=0;i<n;i++)for(int j=0;j<=k;j++)if(f[i][j]<ans)for(int l=1;l<=k;l++)if(i+a[l]<=n && pre[i+a[l]][l]-pre[i][l]==0)f[i+a[l]][l]=min(f[i+a[l]][l],f[i][j]+v[l]+(!j || j==l?0:W));for(int i=1;i<=k;i++) ans=min(ans,f[n][i]);printf("%lld",ans==f[0][1]?-1:ans);return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 5907. 【NOIP2018模拟10.16】轻功(qinggong)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。