字首和 dfs Jzoj P5797 跳躍

2022-09-18 00:57:12 字數 1470 閱讀 9269

description

你曾經夢想過你是電腦遊戲中的主角嗎?這個故事的主角,branimir,現在正在做這個夢。

在branimir的夢中,世界是由從左到右排列的n座摩天大樓組成的。對於第i座摩天大樓,我們知道摩天大樓的高度hi和房頂金幣的數量gi。遊戲從在任何摩天大樓上跳躍開始,由幾步組成。在每一步中,branimir都可以從他目前所在的摩天大樓向右跳(他也有可能跳過其中的幾個),到乙個高度不低於現在的摩天大樓。假如branimir在一座摩天大樓,他可以拿這座大樓的金幣。branimir可以在任意步數之後結束遊戲(0步也可以)通往下一關,但必須要收集至少k個金幣。

現在要求branimir通往下一關的方案數。兩個方案當做不同當且僅當branimir在其中一次跳過其中一座摩天大樓而另一次沒有。

input

第一行包含兩個整數n,k

接下來n行,每行兩個整數hi和gi

output

輸出乙個整數,表示不同的方案數。

sample input

input1:

4 62 1

6 37 2

5 6input2:

2 74 6

3 5input3:

4 15

5 55 12

6 10

2 1

sample output

output1:

3output2:

0output3:

4

data constraint

對於40%的資料,1<=n<=20

對於100%的資料,1<=n<=40,1<=k<=4*10^10,1<=hi,gi<=10^9

hint

第乙個樣例解釋

,三種方案

1 #include 2 #include 3 #include 4

using

namespace

std;

5intn;6

long

long ans,k,h[50],g[50],p[50],f[50],q[50];7

void dfs(int d,int last,long

long

sum)814

if (h[d]>=h[last]&&sum+g[d]>=k) ans+=f[d];

15else

16if (h[d]>=h[last]&&sum+q[d]>=k) dfs(d+1,d,sum+g[d]);

17if (sum+p[d+1]>=k) dfs(d+1

,last,sum);18}

19int

main()

2035 q[i]+=g[i];36}

37 dfs(1,0,0

);38 printf("

%lld

",ans);

39return0;

40 }

字首和演算法 一維字首和 二維字首和

輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示整數數列。接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。輸出格式 共m行,每行輸出乙個詢問的結果。資...

字首和 (1)什麼是字首和和一維字首和

字首和 prefix sum 的定義為 對於乙個給定的數列 a,它的字首和數列 s 是通過遞推能求出來得 例如 假設陣列a和字首和陣列s都已經定義 int i 初始條件 a 0 0 s 0 0 for i 1 i n i 下面我們用乙個模板題,將完整的一維陣列字首和做乙個簡單的展示。題目鏈結 inc...

python字首 python字首和演算法

我試圖理解字首和概念背後的思想,看看codity here 蘑菇揀選器問題 在字首和課程中給出的例子 我的理解是,整個概念是基於乙個簡單的屬性,即為了求陣列a的兩個位置a pos left,pos right 之間的所有元素的和,使用第二個陣列p,其中所有元素都是連續求和的,其中搜尋到的和計算為 值...