标题:代码实现出现问题,希望大神能来指正
取消只看楼主
楚川杉
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2020-3-10
结帖率:66.67%
已结贴  问题点数:20 回复次数:5 
代码实现出现问题,希望大神能来指正
在洛谷新手村做的题(递归题+记忆化搜索):

正常的话输入50,50,50应该输出w(50, 50, 50) = 1048576,但是不知道为什么每次输出的值都不一样且不是答案,所以想请大神帮忙看看为什么为这样

以下是我的代码
程序代码:
#include<iostream>
#include<string.h> 
using namespace std;

long long r[25][25][25]={0};
int w(int a,int b,int c){
    if(a<=0||b<=0||c<=0) return 1;
    else if(r[a][b][c]!=0) return r[a][b][c];    
    else if(a>20||b>20||c>20){    
    r[20][20][20]=w(20,20,20); 
     return r[20][20][20];
     }
    else if(a<b&&b<c){
    r[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
    }
    else r[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
    return r[a][b][c];
}    
int main(){
    int a,b,c;

    while(1){
    cin>>a>>b>>c;
    memset(r,0,sizeof(r));
    if(a==-1&&b==-1&&c==-1) break;
    cout<<"w("<<a<<','<<b<<','<<c<<")="<<w(a,b,c);
    }
} 
搜索更多相关主题的帖子: return int || 代码 出现 
2020-03-10 23:14
楚川杉
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2020-3-10
得分:0 
输入:
0 0 0
1 1 1
2 2 2
10 4 6
50 50 50
-1 7 18
17 17 18
19 17 18
21 -21 20
-1 -1 -11
-1 -1 -1


正确会输出:
w(0, 0, 0) = 1
w(1, 1, 1) = 2
w(2, 2, 2) = 4
w(10, 4, 6) = 523
w(50, 50, 50) = 1048576
w(-1, 7, 18) = 1
w(17, 17, 18) = 131072
w(19, 17, 18) = 524271
w(21, -21, 20) = 1
w(-1, -1, -11) = 1

我的代码输出:
2020-03-10 23:21
楚川杉
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2020-3-10
得分:0 
回复 2楼 八画小子
哦~,我知道了 输入 50 50 50的时候r[a][b][c]!=0 那里越界了,return了野值
2020-03-10 23:25
楚川杉
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2020-3-10
得分:0 
回复 4楼 八画小子
谢谢您的解答
2020-03-10 23:25
楚川杉
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2020-3-10
得分:0 
回复 7楼 forever74
还是不行
2020-03-10 23:45
楚川杉
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2020-3-10
得分:0 
回复 7楼 forever74
解决啦,谢谢
2020-03-11 00:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499700-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096854 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved