- 导弹拦截
- 2017-05-11 20:53:36 @
#include<bits/stdc++.h>
using namespace std;
int a[30],n=1,lar=0,sm=0,t=0,w=0,lar1,z=0,b[30],d,big1;
struct stuff
{
int wz[21];
int v;
int js=0;
} f[21];
int main()
{
while(scanf("%d",&a[n])) {b[n]=a[n];if (getchar()=='\n') break;n++;}
int tot=n;
z++;
lar=0;
for(int k=1;k<21;k++) memset(f[k].wz,0,sizeof(int)*21);
for (int i=1;i<=n;i++)
{
if (b[i]>32000) continue;
f[i].v=1;
for (int j=1;j<i;j++)
{
if ((b[j]>=b[i])and(f[j].v>=f[i].v)and(b[j]<32000)) {f[i].v+=1;f[i].js++;f[i].wz[f[i].js]=j;}
}
f[i].js++;
if (f[i].v>lar)
{lar=f[i].v;w=i;}
if (z==1) lar1=lar;
}
for(int k=1;k<21;k++) memset(f[k].wz,0,sizeof(int)*21);
for(int k=1;k<21;k++) f[k].v=0;
for(int k=1;k<21;k++) f[k].js=0;
while (tot>0)
{
big1=0;lar=0;
for(int k=1;k<21;k++) memset(f[k].wz,0,sizeof(int)*21);
for(int k=1;k<=n;k++) if((a[k]<32000)and(a[k]>big1)){big1=a[k];d=k;}
for (int i=d;i<=n;i++)
{
if (a[i]>32000) continue;
f[i].v=1;
for (int j=d;j<i;j++)
{
if ((a[j]>=a[i])and(f[j].v>=f[i].v)and(a[j]<32000)) {f[i].v+=1;f[i].js++;f[i].wz[f[i].js]=j;}
}
f[i].js++;f[i].wz[f[i].js]=i;
if (f[i].v>lar)
{lar=f[i].v;w=i;}
}
for(int k=1;k<=f[w].js;k++)
a[f[w].wz[k]]=32001;
t++;
tot=tot-lar;
}
cout<<lar1<<","<<t-1;
return 0;
}
1 条评论
-
lucky0218 LV 8 @ 2017-05-11 20:53:54
求助啊,为什么程序会出这个问题
- 1