蓝色当当风 2013-10-21 14:36 采纳率: 0%
浏览 917

杭电1087,,dp问题,求解答!

#include
using namespace std;
int n;
int a[10005];
int vis[10005];

int dp(int n)
{
if(vis[n]!=-1)
return vis[n];
vis[n] = 0;
int i;
for(i= n-1;i>=0;i--)
{
if(i==-1)
return 0;

    dp(i);
    if(vis[i]>=vis[n])
        vis[n] = vis[i];

    if(a[i]<a[n])
    {

        int t = 0;;
        t += vis[i]+a[n];
        if(t>vis[n])
            vis[n] = t;
    }
}

}

int main()
{
while(1)
{
memset(a,0,sizeof(a));
memset(vis,-1,sizeof(vis));
cin>>n;

    if(n==0)
        break;
    else
    {
        int i;
        for(i = 1;i<=n;i++)
        {
            cin>>a[i];
        }
        dp(n);
    }

    cout<<vis[n]<<endl;
}
return 0;

}

不知道wa在哪里啊、、、、

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-26 11:20
    关注

    该回答引用ChatGPT

    这个程序可能存在以下几个问题:

    • 未对 dp 函数进行返回值的设置
      在 dp 函数中,没有对返回值进行设置,应该在函数最后添加 return vis[n]; 来返回 vis[n] 的值。
    • 没有对边界条件进行判断
      在 dp 函数中,当 i==-1 时,应该返回 0。否则,程序会进入死循环。
    • 未考虑初始化条件
      在 dp 函数中,应该将 vis[n] 初始化为 a[n]。
    • 下标从 1 开始
      在 main 函数中,数组 a 的下标从 1 开始,因此在输入时应该从 i = 1 开始循环。

    下面是修改后的程序:

    #include<iostream>
    #include<cstring>
    using namespace std;
    int n;
    int a[10005];
    int vis[10005];
    
    int dp(int n)
    {
        if(vis[n]!=-1)
            return vis[n];
        vis[n] = a[n]; // 初始化 vis[n]
        int i;
        for(i= n-1;i>=0;i--)
        {
            if(i==-1)
                return 0;
            dp(i);
            if(vis[i]>=vis[n])
                vis[n] = vis[i];
            if(a[i]<a[n])
            {
                int t = 0;;
                t += vis[i]+a[n];
                if(t>vis[n])
                    vis[n] = t;
            }
        }
        return vis[n]; // 返回 vis[n]
    }
    
    int main()
    {
        while(1)
        {
            memset(a,0,sizeof(a));
            memset(vis,-1,sizeof(vis));
            cin>>n;
            if(n==0)
                break;
            else
            {
                int i;
                for(i = 1;i<=n;i++) // 数组下标从 1 开始
                {
                    cin>>a[i];
                }
                dp(n);
            }
            cout<<vis[n]<<endl;
        }
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示