样例没过,但是题AC了(200分)。求助管理员!!!

P1020 [NOIP1999 提高组] 导弹拦截

@[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


|