前言:
这篇文章还是是为了帮助一些
像我这样的菜鸟
找到简单的题解
我把期中测试的题全写成题解帮助他人
问题描述:
题目背景
本题线下文件测评时的说明:
- 可执行文件名:odd
- 提交源程序文件名:odd.cpp
- 输入文件名:odd.in
- 输出文件名:odd.out
- 时间限制:1秒
- 空间限制:256MB
题目描述
给定序列,求出最长不上升子序列,且子序列中的每一元素均为奇数。
输入格式
输入的第一行是序列的长度 N(1≤N≤1000)。
第二行给出序列中的 N 个整数,这些整数的绝对值范围都在 0∼10000 之间。
输出格式
一行,一个整数,表示最长奇数不升子序列的长度。
样例输入
7
1 7 3 5 9 4 8
样例输出
2
样例输入
5
0 3 3 1 9
样例输出
3
样例输入
10
9 9 9 8 8 7 7 6 6 4
样例输出
5
问题提示
对于样例 2,最优序列为 3,3,1。
对于样例 3,最优序列为 9,9,9,7,7。
问题解析:
这道题CSDN上有代码
比较难搞
直接上代码了
完整代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int a[N+1],f[N+1];
int n,maxn=0;//定义变量
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
if(abs(a[i])%2==1)
{
f[i]=1;//设置最初值
for(int j=1;j<i;j++)
{
if(a[j]>=a[i]&&abs(a[j])%2==1)
{
f[i]=max(f[i],f[j]+1);//转换方程
}
}
}
}
for(int i=1;i<=n;i++) maxn=max(maxn,f[i]);
cout<<maxn;//输出结果
return 0;
}