@[kkksc03](/space/show?uid=1) ...
by 紫钦 @ 2017-09-30 18:01:15
额我记得我的文化之旅好像也是这情况
by Victorique @ 2017-09-30 19:36:42
本来例子就错了
by UKE自动机 @ 2017-10-05 18:51:26
@[jiangzizhan0508](/space/show?uid=51171) 哈?样例不是6 2吗。。。
by 紫钦 @ 2017-10-10 12:51:23
```cpp
#include<bits/stdc++.h>
using namespace std;
long long a[150];//用来存放所有炮弹的高度
long long pt[150];//pt,存放当前拥有的所有系统能达到的最大高度
int main()
{
int cc=1;
int guns=0,bj=0;//guns是用系统数量
bool flag=false;//默认标记打不下来
pt[0]=10000000000;
//x我先做了第二个问题
while(cin>>a[cc++])
{
flag=false;//默认标记打不下来
for(int i=1;i<=guns;i++)
if(pt[i]>=a[cc-1])//如果用当前系统能的下来
{
flag=true;//标记能打下来
if(pt[i]<pt[bj])//如果比事先确定的那个系统还要低
bj=i;//那就替换,使用当前系统
}
if(flag)//如果能打下来
{
pt[bj]=a[cc-1];//更新使用的系统的高度
bj=0;//重置标记
}
else//如果打不下来
{
guns++;
pt[guns]=a[cc-1];//新增一个系统,最大高度即为当前导弹的高度
}
}
//下面开始最长不上升子序列
int b[150]={};
int ans=0;
for(int i=1;i<cc-1;i++)b[i]=1;//默认最长不上升子序列是1,就是它本身
for(int i=cc-2;i>=1;i--)
for(int j=i+1;j<cc-1;j++)
if(a[j]<=a[i])b[i]=max(b[i],b[j]+1);
//如果上升,那就更新,运用了动态规划的无后效原则。
for(int i=1;i<cc-1;i++)ans=max(ans,b[i]);//搜索一下所有序列的最长的那个
printf("%d\n%d",ans,guns);
return 0;
}
```
by 洛谷1号管理员 @ 2017-10-11 19:12:22
求关注
by 洛谷1号管理员 @ 2017-10-11 19:12:44