玄学错误
  • 板块学术版
  • 楼主Thomas_Cat
  • 当前回复9
  • 已保存回复9
  • 发布时间2020/10/17 23:14
  • 上次更新2023/11/5 10:31:00
查看原帖
玄学错误
326382
Thomas_Cat楼主2020/10/17 23:14
【问题描述】
定义“子序列”为从序列中去掉任意个(可能全都去掉,可能一个都没去掉)元素后的序列。
给定一个整数序列,求它们的最长严格单调递增子序列的长度。

【输入格式】
第一行,一个整数N。
第二行, N个整数k表示序列。

【输出格式】
最长严格单调递增子序列的长度。

【样例输入】			
7				    
2 1 4 3 1 5 6

【样例输出】
4

【时间限制】			【空间限制】
1s				         1GB

数据规模
1<=N,k<=1000

说明
样例输入的最长上升子序列可以为2 4 5 6,也可以为1 4 5 6,或者1 3 5 6。
但是它们长度都是4。

懒得用 LaTeX\LaTeX

为什么这两份代码有什么不同点啊,为什么一个用数组 定义 ={1} 和在后面的 for =1 有什么区别啊。。。

这个是老师的代码(就是 for =1 的那种,马蜂有点奇怪()

#include <bits/stdc++.h>
using namespace std;
int N, a[1003], dp[1003];
int main()
{
    cin >> N;
    for (int i=1; i<=N; i++)
    {    dp[i]=1;//不同点
        cin >> a[i];}
    for(int x = 2; x <= N;x++)
        for(int i = 1; i <= x; i++)
            if(a[i]<a[x])
                dp[x]=max(dp[x],dp[i]+1);
    cout << dp[N];
}

我的代码:

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int n,a[10001],dp[10001]={1};//不同点
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int x=2;x<=n;x++){
        for(int i=1;i<=x;i++){
            if(a[x]>a[i]){
                dp[x]=max(dp[x],dp[i]+1);
            }
        }
    }
    cout<<dp[n];
    return 0;
}
2020/10/17 23:14
加载中...