【洛谷】P1586 四方定理
这道题就是一个递推(或者就是一个类似背包的算法),最后把分解成1~4个平方数的方案数累加即可。
#include<bits/stdc++.h> using namespace std; int t,n; int dp[33000][5]; void Init() { dp[0][0] = 1; for (int i = 1 ; i*i <= 32768 ; i ++) for (int j = i*i ; j <= 32768 ; j ++) for (int k = 1 ; k <= 4 ; k ++) dp[j][k] += dp[j-i*i][k-1]; } int main() { Init(); scanf("%d",&t); for (int i = 1 ; i <= t ; i ++) { scanf("%d",&n); int ans = dp[n][1]+dp[n][2]+dp[n][3]+dp[n][4]; printf("%d\n",ans); } return 0; }