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 4using
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,其中所有元素都是連續求和的,其中搜尋到的和計算為 值...