一步步刪掉迴圈,
首先,原式是∑i
=1n∑
j=1m
∑k=i
n∑l=
jm∑p
=ik∑
q=jl
1 刪掉最後兩個迴圈 ∑i
=1n∑
j=1m
∑k=i
n∑l=
jm(k
−i+1
)(l−
j+1)
發現,當i,
j 固定,隨著k,
l 的變化,(k
−i+1
),(l
−j+1
) 都是每次減少1
so, ∑i
=1n∑
j=1m
[1+2
+⋅⋅⋅
+(n−
i+1)
][1+
2+⋅⋅
⋅+(m
−j+1
)]再根據等差數列求和公式, ∑i
=1n∑
j=1m
(n−i
+1)(
n−i+
2)(m
−j+1
)(m−
j+2)
4 又發現∑ni
=1(n
−i+1
)(n−
i+2)
, 其實就是1∗
2+2∗
3+3∗
4+⋅⋅
⋅+n∗
(n+1
) 設其為g(n
) ,m 類似
答案就是g(
n)∗g
(m)4
接著考慮求g(
n) =
12+1
+22+
2+32
+3+⋅
⋅⋅+n
2+n
=12+
22+3
2+⋅⋅
⋅+n2
+1+2
+3+⋅
⋅⋅+n
根據自然數冪和得 =n
(n+1
)(2n
+1)6
+n(n
+1)2
#include
#include
#include
#include
#include
#include
#include
const
int maxlongint=2147483647;
const
long
long mo=1000000007;
const
int n=10000005;
using
namespace
std;
long
long ans,n,m,ny4,ans1,ans2,ny6;
long
long mi(long
long x,long
long y)
return sum;
}int main()
NOIP2016提高組模擬 積木
比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...
計數 NOIP2016提高A組模擬7 15
樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...
NOIP2016提高A組模擬9 2 單峰
問1 n,n個數的全排列中有多少個滿足單峰序列的性質,並把答案mod 1e9 7 這題還是很簡單的,一開始打了乙個50分的做法,然後發現答案就是2n 1,然後沒有發現輸入也會爆,於是就得了50分 我們容易發現峰一定是最大的那個數,我們把峰放到每乙個位置上,然後在往峰的左邊隨便填一些數,每種填數的方法...