SIGSEGV动态编程错误-CodeChef
SIGSEGV Error on Dynamic Programming - CodeChef
希望大家度过美好的一天!
我喜欢编程,但在过去的几天里,我彻夜难眠,CodeChef总是在我的动态编程解决方案中返回SIGSEGV错误。
我现在正在解决这个问题。问题来了-
在Byteland,他们有一个非常奇怪的货币体系。每个拜占庭人金币上写着一个整数。硬币n可以是在银行里兑换成三种硬币:n/2、n/3和n/4。但是这些数字都是四舍五入的(银行必须盈利)。你也可以以美元的价格出售比特兰币。交易所费率为1:1。但是你买不到比特兰币。你有一块金子硬币你能得到的美元最高金额是多少它
输入
输入将包含几个测试用例(不超过10个)。每个测试用例是一行,数字为n,0<=n<=1000 000 000。它是你硬币上写的数字。输出
对于每个测试用例输出一行,其中包含最大数量你能赚多少美元。示例
输入:12 2
输出:13 2您可以将12更改为6、4和3,然后更改这些转换为$6+$4+$3=$13。如果你试着把硬币2换成更小的3硬币,您将获得1、0和0,以后您最多只能获得1美元在他们当中。最好直接把2美元硬币换成2美元。
现在我知道这很容易。最初,当我声明一个10^9整数长的大数组(超过1GB的内存…哇!)时,我确实陷入了困境,但回到我的感觉——我决定在10001之前进行内存化,然后进行简单的递归。但是,我还是犯了一个错误,它给出了SIGSEGV错误。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
long long n[100001];
long long calc(long long x) {
if (x < 10001) {
if(n[x] != 0) return n[x];
n[x] = max(x, calc(x/2) + calc(x/3) + calc(x/4));
return n[x];
}
else return max(x, calc(x/2) + calc(x/3) + calc(x/4));
}
int main() {
memset(n, 0, sizeof(n));
n[1] = 1;
n[2] = 2;
n[3] = 3;
n[4] = 4;
n[5] = 5;
n[6] = 6;
for (int i = 7; i < 10001; i++)
n[i] = calc(i);
int t = 10;
while (t--) {
long long c;
scanf("%lld", &c);
printf("%lldn", calc(c));
}
return 0;
}
我也解决了以前的一些问题,他们都给了我一两次这个错误。我知道这个错误意味着我试图访问尚未分配的内存,但我的方法有什么错,总是会出现这个错误?
问题出在n=0的拐角情况下。
calc(0)无限地递归,因为0<10001并且n[0]=0。您需要添加calc(0)=0的终止条件。
外卖:
- 请随时查看您的编程竞赛解决方案
- 始终确保递归不会导致无限循环
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 为什么可变大小的数组会导致Codechef出现错误答案
- 为什么当我从语句检查中删除"+ mod"时,以下程序给出错误的答案。问题链接:https://www.codechef.com/problems/FFC219B
- CodeChef 中代码的运行时错误 (SIGSEGV)
- SIGSEGV动态编程错误-CodeChef
- CodeChef每日培训错误答案
- 为什么我在Codechef的褪色回文中得到一个WA,即使我在我的代码中没有发现任何错误,它对我来说工作得很好
- Codechef:从数组元素中移除成对的公共因子,并找到最小乘积.为什么回答错误
- Codechef 初学者 permut2:收到错误 - 它在 codechef 上给出了错误的答案,但给出了正确的示例输