为什么当 n>=10 时此代码会冻结?
Why Does This Code Freeze When N>=10?
这是C 11中编写的程序。
text.in具有N< 10的值时,此程序正常工作。但是,当n增加到11时,它会冻结并似乎永远持续。为什么可以?
#include <cstdio>
using namespace std;
int dp[40][391]={0};
int main() {
FILE* in = fopen("text.in","r");
FILE* out = fopen("text.out","w");
int N;
fscanf(in,"%d",&N);
int sum = N*(N+1)/2;
for (int i=0; i<=N; i++) dp[0][i]=1;
if (sum%2==1) {fprintf(out,"0"); return 0;}
for (int n=1; n<=sum; n++) {
for (int k=1; k<=N; k++) {
if (n-k>=0) dp[n][k]=dp[n-k][k-1];
dp[n][k]+=dp[n][k-1];
}
}
fprintf(out,"%d",dp[sum/2][N]/2);
return 0;
}
我很惊讶与N == 9
一起使用。
您定义
int dp[40][391]
然后您读/写
if (n-k>=0) dp[n][k]=dp[n-k][k-1];
dp[n][k]+=dp[n][k-1];
使用第一个索引n
,范围从 1
到 sum
int sum = N*(N+1)/2;
因此,如果N < 9
,sum
较低,则40
;如果N>=9
,则sum
大于40
[sum == 45
的CC_11;sum == 55
的N == 10
;sum = 66
用于N == 11
。
因此,使用N == 11
,您可以编写dp[66][k]
,当时第一个索引的最高法律值为39
。
灾难的精彩食谱。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的输出在到达代码的这一部分时冻结?
- 为什么当 n>=10 时此代码会冻结?
- 如何提高四叉树代码的性能以防止程序冻结
- 由于删除对象而导致的 Cpp 代码主线程冻结可以使用智能指针解决,也可以不使用智能指针来解决
- GraphicsMagick代码冻结在节点插件(OSX)中
- Visual Studio 2015在调试cpp代码时冻结
- 试图打开QDialog时代码冻结
- OpenCL(意外地)在尝试运行内核代码时冻结