DP P1586 四方定理

2022-04-16 22:45:40 字數 1140 閱讀 2724

傳送門

第一行為乙個整數t代表資料組數,之後t行每行乙個數n代表要被分解的數

對於每個n輸出一行,為方案個數

2

2003

25

2

3

t<=100,n<=23768。

dp方程轉移之類顯然,唯一需要說的是有關去重的問題。顯然需要打一張到maxn的平方表。然後f[i][j]代表i分解為j個平方數的方案數。如題面所說,x=a2+b2與x=b2+a2是同一種方案。既然如此,就不能外層迴圈第一維度內層迴圈平方表進行轉移,因為這樣在列舉了第一種方案後會繼續列舉相同的第二種方案。考慮階段:對於乙個數x,它的分解方式可分為兩個類,第一種是包含a2的,第二種是不包含a2的。對於這兩個類分別列舉轉移,則不會產生重複。正確性顯然。故正確的列舉順序是外層為平方表,內層是數字x,第三層是分解個數k。

#include#define maxn 40000

#define maxk 32769inline

void qr(int &x)

while(ch>='

0'&&ch<='

9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();

x*=f;

return;}

inline

int max(const

int a,const

int b)

inline

int min(const

int a,const

int b)

inline

int abs(const

int x)

inline

void swap(int &a,int &b)

const

int biao=;

int t,frog[maxn][5

],a;

inline

int sigma(int a)

intmain()

}do

while(--t);

return0;

}

對於需要去重的方案個數dp,可以考慮將乙個狀態分解為包括乙個元素的狀態和不包括乙個元素的狀態,以被包括的元素做階段進行轉移,則不存在重複問題。

P1586 四方定理

四方定理是眾所周知的 任意乙個正整數nn 可以分解為不超過四個整數的平方和。例如 25 1 2 2 4 25 12 22 22 42 當然還有其他的分解方案,25 4 3 25 42 32 和25 5 25 52 給定的正整數nn 程式設計統計它能分解的方案總數。注意 25 4 3 25 42 32...

121 四方定理

121.四方定理 數論中有著名的四方定理 所有自然數至多只要用四個數的平方和就可以表示。我們可以通過計算機驗證其在有限範圍的正確性。對於大數,簡單的迴圈巢狀是不適宜的。下面的 給出了一種分解方案。請仔細閱讀,填寫空缺的 下劃線部分 注意 請把填空的答案 僅填空處的答案,不包括題面 存入考生資料夾下對...

「四方定理」 藍橋杯

int f int n,int a,int idx return 0 int main int argc,char argv int r f number,a,0 printf d d d d d n r,a 0 a 1 a 2 a 3 return 0 請分析 邏輯,並推測劃線處的 僅把缺少的 作...