最长不下降子序列(没有任何算法成分!!!)
程序员文章站
2022-06-02 17:04:17
...
在面临种种质疑,多重调试下,我终于打出了非动态规划等算法的代码!(其中运用到了贪心的思想 )
好感人鸭 QWQ
解题思路:刚开始是应为之前做了P1165日志分析,脑子里面有一个同化的思想,于是这题就可以利用同化的思想来解题(老师说这个是贪心,但其实我并不这么认为,我感觉这个就是同化的思想)。选择当前更为优化的数字代替之前最为优化的数字。
#include<bits/stdc++.h>
using namespace std;
int n,a[1010],t,b[1010];
int main()
{
// freopen("seq.in","r",stdin);
// freopen("seq.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
b[1]=a[1];//先设一个初始的值
t=1;
for(int i=2;i<=n;i++)
{
if(a[i]>=b[t])//如果比前面的大,就插在最后面
{
t++;//数组扩大
b[t]=a[i];//把当前数存起来
}
else
if(a[i]<b[t])//如果比当前最大的小
{
int j=1;
while(b[j]<=a[i])//就找到b数组中第一个大于当前数的位置
{
j++;
}
b[j]=a[i];//替换
}
}
// for(int i=1;i<=t;i++) cout<<b[i]<<" ";cout<<endl;
cout<<t<<endl;
return 0;
}
上一篇: 落地干货:微信公众号推广的十六个技巧