NOIP2011 普及組複賽模擬試題 第二題 買票

2022-05-13 04:16:31 字數 1641 閱讀 2072

題目背景background

ztc真的遇上黃牛了。。。

題目描述description

週末ztc想去劇場看演出,但是他沒有票。這時,救世主wzj出現了,他慷慨地願意賣給ztc一些票。

wzj手上共有n張票,但每張票的費用都不一樣,貪心的ztc想要得到更多的票,但又想花費的最少,慷慨的wzj願意給連續的m張票。

ztc希望你能幫助他在花錢範圍內取得最大的票數。

輸入輸出格式input/output

輸入格式:

輸入檔案tickets.in的第一行是2個整數n、f。其中(2≤n≤1000000),表示票的數目,(10≤f≤10000),表示ztc身上的錢。

接下來的1行,有n個整數a(1≤a≤30),表示每一張票的票價。

輸出格式:

輸出檔案tickets.out僅一行整數m,表示ztc能得連續的最大票數。

輸入輸出樣例sample input/output

樣例測試點#1

輸入樣例(tickets.in):

5 10

2 3 1 6 7

輸出樣例(tickets.out):

3

思路:這題呢,乍一看,有點像揹包問題,選擇最優解放入

可以使用遞迴簡單點,把每張門票的**存入陣列,遞迴函式要有四個條件:

①如果票數沒了,說明剛好買完,返回1,ans++

②如果錢沒有了,返回0

③如果有錢沒票,返回0

④如果上述條件都成立,繼續遞迴,票數--,口袋裡的錢減去已經買的門票的錢。

**如下:

1 #include 2

int w[100];//

存放每張票的**

3int ans;//

結果 4

int tickets(int s,intn)5

11else

if(s<0) return

0;//

如果錢都沒有了,返回0

12else

if(n<=0&&s>0) return

0;//

如果還有錢,但是沒票賣了,返回0

13else

1420

return tickets(n-1,s);//

繼續,電影票數目-- 21}

22}23int

main()

2436 tickets(f,n);//

傳入遞迴函式(身上的錢,電影票數目) 37}

38 printf("

%d\n

",ans);

39return0;

40 }

NOIP2011普及組 瑞士輪

題目 洛谷p1309 codevs1132 vijos p1771 題目大意 要你模擬瑞士輪賽制,求出r輪後第q名選手的編號。解題思路 首先對所有選手按分數從大到小進行排序,然後模擬比賽。因為原本是排好序的,贏的加1分,輸的扣1分,所以贏的人和輸的人也是分別有序的。所以我們可以把每輪贏的人扔進乙個陣...

NOIP 2011普及組 瑞士輪

背景 在雙人對決的競技性比賽,如桌球 羽毛球 西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公 平,偶然性較低,但比賽過程往往十分冗長。本題中介紹的瑞士輪賽制,因最早使用於 1895 年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與...

2023年NOIP普及組複賽題解

題目涉及演算法 這道題目是一道基礎的模擬題,只需要模擬將數字進行翻轉就可以了,注意 0 和 負數。實現 如下 include using namespace std void solve int num if num 0 int t 0 while num 0 cout t endl int n i...