AT_abc243_g [ABC243G] Sqrt题解
题目大意
有一个数列,初始时只有一个数
解法
考虑 DP。
设
设
这里有几点细节需要注意,由于此题数据范围过大,sqrt()
的精度可能不够,需要将开根的数强制转为 long double
才行。
AC Code
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 5; int t, x, dp[N], f[N]; signed main() { dp[1] = 1; for(int i = 2; i <= 1e5; i++)//预处理 for(int j = 1; j <= sqrt((long double)i); j++) dp[i] += dp[j]; cin >> t; while(t--) { cin >> x; int y = sqrt((long double)x); int ans = 0; for(int i = 1; i <= sqrt((long double)y); i++) ans += (y - i * i + 1) * dp[i];//dp[i]产生的贡献的范围是i * i ~ sqrt(sqrt(x)) cout << ans << "\n"; } return 0; }
本文作者:Luckies
本文链接:https://www.cnblogs.com/Luckies/p/17962592/AT_abc243_g
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步