Jettblue_jr 2022-10-09 11:44 采纳率: 100%
浏览 40
已结题

求大家帮看看为什么不是满分

问题描述
  给定一个长为n的序列,求它的最长上升子序列的长度和一种方案。
输入格式
  输入第一行包含一个整数n。
  第二行包含n个整数,为给定的序列。
输出格式
  输出的第一行包含一个非负整数,表示最长上升子序列的长度。
  第二行包含多个整数,为最长上升子序列中的元素对应的下标 ,按下标从小到大的顺序输出。
样例输入
5
1 3 2 5 4
样例输出
3
1 3 4
样例输入
5
8 5 7 9 1
样例输出
3
2 3 4
数据规模和约定
0<n<=1000,每个数不超过10^6。

#include<bits/stdc++.h>
using namespace std;
int n;
int a[3005];
int dp[3005]={0};
void DPandoutput()
{
  int maxz = 0, s[1005];
    int posdp,pos=1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    scanf("%d",&a[i]);
    for(int i=1;i<=n;i++){
        dp[i]=1;
        for(int j=1;j<i;j++){
            if(a[i]>a[j])
            {
                dp[i]=max(dp[j]+1,dp[i]);
                if(dp[i]>=maxz)
                pos=i;
                maxz=max(maxz,dp[i]);
            }
        }
    }
    printf("%d\n",maxz);
    posdp=maxz;
    s[1]=a[pos];
    int count=1;
    for(int i=pos-1;i>=1;i--){
        if(dp[i]==posdp-1)
        {
            s[++count]=a[i];
            posdp=dp[i];
        }
    }
    for(int i=count;i>=1;i--)
      for (int j = n; j >= 1; j--)
        if (s[i] == a[j]) printf("%d ",j);
    printf("\n");
    return;
}
int main()
{
    DPandoutput();
    return 0;
}

img

除样例外又测了多组数据,输出都正确,求各位帮本蒟蒻看看程序有什么问题,谢谢!

  • 写回答

1条回答 默认 最新

  • 於黾 2022-10-09 11:56
    关注

    你这思路整个就是混乱的
    maxz和pos是在干什么呀,你为什么要找到最大的数的位置呀
    最大的数在哪和最长序列有一毛钱关系吗
    思路没捋清楚,别着急写代码
    先用伪代码把要干什么写出来,觉得逻辑通顺了再翻译成代码
    否则写着写着你自己都不知道代码是在干什么

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀