波動數列 藍橋杯

2021-09-11 02:14:29 字數 1875 閱讀 6466

【資料格式】

輸入的第一行包含四個整數 n s a b,含義如前面說述。

輸出一行,包含乙個整數,表示滿足條件的方案數。由於這個數很大,請輸出方案數除以100000007的餘數。

例如,輸入:

4 10 2 3

程式應該輸出:

2【樣例說明】

這兩個數列分別是2 4 1 3和7 4 1 -2。

【資料規模與約定】

對於10%的資料,1<=n<=5,0<=s<=5,1<=a,b<=5;

對於30%的資料,1<=n<=30,0<=s<=30,1<=a,b<=30;

對於50%的資料,1<=n<=50,0<=s<=50,1<=a,b<=50;

對於70%的資料,1<=n<=100,0<=s<=500,1<=a, b<=50;

對於100%的資料,1<=n<=1000,-1,000,000,000<=s<=1,000,000,000,1<=a, b<=1,000,000。

資源約定:

峰值記憶體消耗 < 256m

cpu消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

這題目確實有些難度,也是一道很好的dp題目,自己沒做出來,就看了很多題解。

簡單將我的看法總結一下,題目資料很大,所以dfs是肯定沒法直接用的,這時候就會想到dp 方法,題目中a,b數量之和為定值,只需要去求得a的數量就可以得到b的數量。這裡就有些跟01揹包相同,設數列首項為t,f(i)=,第i項加上f(i)為第i+1項。所以第2項可表示為t+f(1),第2項可表示為t+f(1)+f(2),第3項可表示為t+f(1)+f(2)+f(3)...........把第一項到第n項累加起來可得表示式n*t + (n-1)f(1) + (n-2)f(2) + ....... +f(n-1) =s。n*t =  s  - 。由於f(i)不為a就為-b,設有c個a,f(i)的係數相加共有1+2+......+n-1 = (n-1)*n/2專案,所以共有c-(n-1)*n/2個b。所以令temp =  s - c*a + ((n-1)*n/2 - c)*b,當temp%n = = 0時,說明temp == n*t,滿足要求。並且,c為1~n-1個數中的若干個數組合相加而得的,每一種組合都是一種方案,到此,我們就可以發現這題已經轉化為求01揹包問題的方案數了。即從體積為1~n-1的物品中有幾種方案能夠恰好填滿揹包。 

#includeusing namespace std;

#define mod 100000007

#define maxn 1100

long long n,s,a,b;

long long all;

long long bo[2][maxn*maxn];//作為滾動陣列

int p=0;

//p為滾動陣列標識,表示當前運算元組的第幾行,(例如當前計算第i行,p指向操作bo陣列第0行,邏輯上i-1行是bo陣列第1行)

void dp()

else

} }} long long sum()

} return count ;

}int main (){

while (cin>>n>>s>>a>>b)

{ all = n*(n-1)/2;

dp();

long long jieguo = sum()%mod;

cout《本文章參考了該大神的部落格:

波動數列 藍橋杯

這是2014年第五屆藍橋杯全國軟體大賽預賽本科a組 c c 組 第10題,也就是最後一題。思路可以想得到,列舉和廣度優先搜尋,由於最後時間緊迫,簡單的計數還沒完成,謹以此文祭奠逝去的藍橋杯。剛看這題,似乎摸不著頭腦,細細欣賞,似乎還可以實現。由於資料量可能很大,這裡使用了long long型別。輸入...

藍橋杯 波動數列

問題描述 觀察這個數列 1 3 0 2 1 1 2 這個數列中後一項總是比前一項增加2或者減少3。棟棟對這種數列很好奇,他想知道長度為 n 和為 s 而且後一項總是比前一項增加a或者減少b的整數數列可能有多少種呢?輸入格式 輸入的第一行包含四個整數 n s a b,含義如前面說述。輸出格式 輸出一行...

藍橋杯歷屆試題 波動數列

include include include include include include include include include include include include include include include include include include includ...