C语言ACM题目,与搜索有关
错误提示:Time Limit Exceeded.
希望指出如何修改代码可以通过测试
关于#C语言#的问题,如何解决?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2023-01-11 17:02关注
22行printf函数里,%d应该是%ld吧。
递归次数多的话,可以建一个3维数组,保存已经计算的函数的值
代码修改如下:#include<stdio.h> long arr[21][21][21] = { 0 }; long fun(long a, long b, long c) { if (a <= 0 || b <= 0 || c <= 0) return 1; else if (a > 20 || b > 20 || c > 20) { if(arr[20][20][20] == 0) arr[20][20][20]= fun(20, 20, 20); return arr[20][20][20]; } else if (a < b && b < c) { if (arr[a][b][c - 1] == 0) arr[a][b][c - 1] = fun(a, b, c - 1); if (arr[a][b - 1][c - 1] == 0) arr[a][b - 1][c - 1] = fun(a, b - 1, c - 1); if (arr[a][b - 1][c] == 0) arr[a][b - 1][c] = fun(a, b - 1, c); return arr[a][b][c - 1] + arr[a][b - 1][c - 1] - arr[a][b - 1][c]; } else { if (arr[a - 1][b][c] == 0) arr[a - 1][b][c] = fun(a - 1, b, c); if (arr[a - 1][b - 1][c] == 0) arr[a - 1][b - 1][c] = fun(a - 1, b - 1, c); if (arr[a - 1][b][c - 1] == 0) arr[a - 1][b][c - 1] = fun(a - 1, b, c - 1); if (arr[a - 1][b - 1][c - 1] == 0) arr[a - 1][b - 1][c - 1] = fun(a - 1, b - 1, c - 1); return arr[a - 1][b][c] + arr[a - 1][b - 1][c] + arr[a - 1][b][c - 1] - arr[a - 1][b - 1][c - 1]; } } int main() { long a = 0, b = 0, c = 0; while (scanf("%1d%ld%ld", &a, &b, &c) && !(a == -1 && b == -1 && c == -1)) { long ret = fun(a, b, c); printf("w(%ld, %ld, %ld) = %ld\n", a, b, c, ret); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料