不CTJ,从我做起

刘嘉柚  •  4个月前


hahaha 模板题都做不出来吗

让本蒟蒻来教你吧

这道题只要稍微分析一下,就会发现输出最长上升子序列长度与最长下降子序列的长度,也就是需要多少套拦截系统与一套系统最多拦截多少枚导弹
#include<cstdio>
#include<iostream>
using namespace std;
int v[10005],f[10005],g[10005]={0,1},maxn,minn;  //maxn表示最长上升子序列长度,minn表示最长下降子序列的长度
int main()
{
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
    int i=1;
    while(~scanf("%d",&v[i])) //输入导弹高度
    { 
        f[i]=g[i]=1; 
        for(int j=1;j<i;j++)
        {
            if(v[i]<=v[j]) //求最长上升子序列
            {
                f[i]=max(f[i],f[j]+1);
            }
            if(v[i]>v[j]) //求最长下降子序列
            {
                g[i]=max(g[i],g[j]+1);
            }
        }
        if(f[i]>maxn) //求出最长上升子序列的长度
        {
            maxn=f[i];
        }
        if(g[i]>minn) //求出最长下降子序列的长度
        {
            minn=g[i];
        }
        i++;
    }
    printf("%d %d\n",maxn,minn); 
    return 0;
}

评论:

自己好好打,复制会错哦


刘嘉柚  •  4个月前