其他分享
首页 > 其他分享> > [Acwing] 1010. 拦截导弹

[Acwing] 1010. 拦截导弹

作者:互联网

https://www.acwing.com/problem/content/description/1012/

目录

问题分析

两个问题

思路

第一问 直接变化转移方程即可 或者 reverse一下

第二问 贪心的求子序列即可

从前往后扫描每个数,对于每个数:

其他收获

y总的字符串处理:

   string line;
    getline(cin, line);
    stringstream ssin(line);
    while (ssin >> h[n]) n ++ ;

CODE:

#include <bits/stdc++.h>
using namespace std;
const int N =  1e3+10;
int f[N],a[N],idx,q[N];

void s_to_int()
{
    string s;
    getline(cin,s);
    s+=' ';
    memset(a,0,sizeof a);
    int l = 0 ;

    int len = s.size();
    for(int i = 0; i<len; i++)
    {
        if(s[i]==' ')
        {
            ++idx;
            for(int  j = l; j<i; j++)
            {
                a[idx] += (s[j]-'0');

                a[idx]*=10;
            }
            a[idx]/=10;
            l = i+1;
        }
    }
}
void solve()
{
    s_to_int();
    //reverse(a+1,a+1+idx);

    int ans = 0 ,cnt = 0 ;
    for(int  i =1; i<=idx; i++)
    {
        f[i] = 1;
        for(int j = 1; j<i; j++)
        {
            if( a[i]<= a[j])
            {
                f[i] = max(f[i],f[j]+1);
            }
        }
        ans = max(ans , f[i]);

        int k = 0 ;
        while(k<cnt && q[k]<a[i]) k++;
        if(k == cnt) q[cnt++] = a[i];
        else q[k] = a[i];


    }
    cout<<ans<<endl;
    cout<<cnt<<endl;


}
int main()
{
    solve();
    return 0 ;
}

标签:拦截导弹,idx,10,int,ans,序列,line,1010,Acwing
来源: https://blog.csdn.net/qq_34364611/article/details/118023582