[noi2009]管道取珠
對於\(\sum a[i]^2\)
我們不如把它理解成
乙個取珠遊戲a和乙個取珠遊戲b同時舉行,當a中的任意乙個結果和b中的任意乙個結果相同時,我們把它加進方案
f[i][j]表示a遊戲中上管道取了i個球,b遊戲中上管道取了j個球(乙個迴圈列舉k,所以a遊戲中下管道取了k-i個球,b遊戲中下管道取了k-j個球)
於是便非常的簡單了
#include#include#include#includeusing namespace std;
#define maxn 610
#define mod 1024523
int n, m;
int a[maxn], b[maxn], f[maxn][maxn], c[maxn][maxn];
inline int read()
int main()
for (register int i = 0; i <= min(k, n); i++)
for (register int j = 0; j <= min(k, n); j++)
f[i][j] = c[i][j];
} printf("%d", f[n][n]);
return 0;
}
NOI2009 管道取珠
noi2009 管道取珠 給出乙個長度為n的01序列 和乙個長度為m的01序列 給出 n m 個格仔,按順序將a和b填入,也就是事先選好n個位置,按順序地填入a,然後其它的按順序填入b,設填後的格仔有 c 次重複,問所有的格仔填法 c 2 的和,n,m leq 500 平方可以轉換為兩個人填,方案相...
NOI2009 管道取珠
sum a i a i 可以理解為兩個獨立但同時進行的遊戲得到同乙個輸出序列的方案數。設f l,i,j 為每個遊戲都已經推出了l個珠子時,第乙個遊戲裡上邊兒的管道已經推出了i個,第二個遊戲中上邊兒管道推出了j個的方案數。考慮到若要推出序列相同,那麼對於每個階段l,兩個遊戲的推出序列應始終相等。這樣,...
NOI2009 管道取珠
對於處理方案數量平方的優化 可以看成兩個人玩同乙個遊戲,他們輸出序列一樣的種類數。然後設f i1 j1 i1 j2 為當前狀態方案數量的平方和。i1,i2表示第乙個人上管道,下管道分別取出了i1,i2個,i2,j2表示第二個人 i1 j1 i2 j2,所以可以把最後一維去掉。然後加乙個滾動陣列可以進...