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 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题