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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JZOJ 2309. 【中山市选2011】辽哥游戏

發(fā)布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 2309. 【中山市选2011】辽哥游戏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Description

  張遼是一個長發(fā)飄飄的非常聰明的男孩,人人都稱他為“遼哥”。遼哥喜歡玩一個有趣的電腦游戲。這個游戲開始的時候有n個碉堡,每個碉堡擁有一個防御值和一個附加值。玩家擁有一個初始的攻擊力。如果玩家破壞了一個碉堡,則他能得到1分。每一次,遼哥會選擇一個碉堡進(jìn)行攻擊。所有未被破壞的碉堡會聯(lián)合起來防御,因此為了破壞那個碉堡,遼哥的攻擊力必須大于或者等于所有未被破壞的碉堡的防御值之和,否則遼哥就會輸?shù)粲螒颉H绻|哥成功破壞了那個碉堡,那么他的攻擊力會變成那個碉堡的附加值,然后他可以選擇下一個攻擊的目標(biāo)。
  由于遼哥擁有強大的編程能力,他不費吹灰之力就改寫了那個游戲。在游戲開始前,他可以用炸彈消滅任意的碉堡,但是他不能通過這種方式來獲得分?jǐn)?shù)。問題來了,在游戲開始后,遼哥可以得到的最大分?jǐn)?shù)是多少?

Input

  輸入包含多組(不超過100組)測試數(shù)據(jù)。
  每組測試數(shù)據(jù)的第一行包含一個正整數(shù)N,表示測碉堡的數(shù)目。接下來有N行,每行包括2個非負(fù)整數(shù)。第i+1行的2個整數(shù)分別表示第i個碉堡的防御值和附加值。最后還有一行,為一個整數(shù),表示遼哥在游戲開始時的初始攻擊力。
  輸入以文件結(jié)束符結(jié)束。

Output

  對每組數(shù)據(jù),輸出一行,為一個整數(shù),表示遼哥可以拿到的最大分?jǐn)?shù)。

Sample Input

3
10 9
25 30
8 7
50
5
100 230
334 331
33 288
35 100
334 22
600

Sample Output

3
4

Hint

【數(shù)據(jù)范圍】
  對20%的數(shù)據(jù),有N<=10;
  對40%的數(shù)據(jù),有N<=100;
  對100%的數(shù)據(jù),有N<=1000,每個碉堡的防御值和附加值均不會超過2000000。

Solution

  • 開始時將若干個碉堡炸掉的操作有點難處理,我們考慮倒著做。

  • 設(shè) f[i] 表示選的最后 i 個碉堡(任意選)的所需的最小攻擊力。

  • 設(shè)第 j 個碉堡的防御值和附加值分別為 b[j],d[j]

  • 則有 f[i]=min{f[i?1]+b[j]}?(d[j]f[i?1])

  • 還有碉堡要按 b+d 從小到大排序(顯然 b+d 小的后選更優(yōu))。

  • 這樣處理完之后選一個最大的 f[i] 使得初始攻擊力 mf[i] 即滿足題意,輸出此時的 i 即可。

  • 時間復(fù)雜度 O(T?n2)

Code

#include<cstdio> #include<cstring> #include<algorithm> #include<cctype> using namespace std; const int N=1001; struct data {int x,y; }a[N]; int n; int f[N]; 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 int min(int x,int y) {return x<y?x:y; } inline bool cmp(data x,data y) {return x.x+x.y<y.x+y.y; } int main() {while(~scanf("%d",&n)){for(int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();memset(f,60,sizeof(f));sort(a+1,a+1+n,cmp);f[0]=0;for(int i=1;i<=n;i++)for(int j=i;j;j--)if(a[i].y>=f[j-1]) f[j]=min(f[j],f[j-1]+a[i].x);for(int i=n,m=read();i>=0;i--)if(m>=f[i]){printf("%d\n",i);break;}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 2309. 【中山市选2011】辽哥游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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