LuoguP1586 题解
也可以在 LuoguP1586 (tencentcs.com) 获得更好的阅读体验。
Luogu_P1586 题解
一道比较简单的题目,看到求种类数,考虑 DP。
设 表示第 个数划分为 个数的平方的种类数,那么很显然的,当你从 中划出一个平方数 ,那么问题相当于变成了 如何将 划分为 个数,于是状态转移方程就呼之欲出了:。
这个玩意的转移只能按照 的顺序枚举,不然会重复统计/漏统计一些数。边界条件很显然的是 ,因为此时我们的目标已经达成了。
多测注意清空。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define lson (p << 1)
#define rson ((p << 1) | 1)
#define mid ((l + r) >> 1)
const int MAXN = 50005;
int n, f[MAXN][5], T, ret;
signed main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
f[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) f[j][k] += f[j - i * i][k - 1];
}
}
cin >> T;
while (T--) {
cin >> n;
for (int i = 1; i <= 4; ++i) ret += f[n][i];
cout << ret << endl; ret = 0;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】