为什么我的代码在"decrease to zero"问题中被时间超过了
why my code is getting time excedded in "decrease to zero" problem
试图解决黑客排名问题。
系统会为您提供 Q 查询。每个查询由一个数字 N 组成。您可以在每个移动中对 N 执行 2 个操作。如果 N=a×b(a≠1, b≠1(,我们可以更改 N=max(a,b( 或将 N 的值减少 1。确定将 N 的值减小到 0 所需的最小移动次数。
你能建议我如何改进我的代码吗?
int downToZero(int n) {
int dp[n+1];
dp[0]=0;dp[1]=1;dp[2]=2;dp[3]=3;
for(int i=4;i<=n;i++)
{
dp[i]=dp[i-1]+1;
for(int j=2;j*j<=i;j++)
{
if(i%j==0)
{
int fac=max(j, i/j);
dp[i]=min(dp[i], dp[fac]+1);
}
}
}
return dp[n];
}
太慢的位是:
for(int j=2;j*j<=i;j++)
{
if(i%j==0)
您正在线性扫描以查找因素。必须有更好的方法。例如,保留素数列表。
相关文章:
- 使用 std::istream_iterator 时,它似乎跳过了空文件行 - 如果可能的话,如何避免这种情况?
- std::this_thread::sleep_for 睡眠时间过长
- 为什么我的代码在"decrease to zero"问题中被时间超过了
- C++ For Loop在过程中被跳过了.如何解决?
- C++跳过了辛线
- 如何在我的代码中修复无穷循环?我认为它跳过了第二个CIN,因此它一直在循环
- QT Qtimeline跳过了第一个框架
- 输入后,我的程序似乎跳过了第一个IF语句,直接转到ELSE
- C RLE BMP压缩跳过了最后一个字节
- 提升单元测试似乎跳过了应执行的代码
- C 将数据读取到一个结构,但它跳过了我的一个获取线,使该元素空白
- C 控制台应用程序;在牙科诊所情况下,时间优化了队列
- 为什么我的程序跳过了一个步骤
- 当我采用测试用例数 = 1 时,我的程序终止.其他明智的是,它给出了正确的答案,但跳过了最后一个测试用例
- 为什么QTimer::singleShot在时间1阻塞了我的主线程而不是0
- DCT执行时间过长
- 为什么我的代码跳过了这个循环
- 请解释:在 for 循环之后跳过了行
- C++编译器似乎跳过了代码行
- 我用Turbo c++编写的c++程序过了一段时间就挂了