背景:
是昨天校赛的A题,当时没做出来;晚上想了想用了贪心过了,但是群里大神说贪心只是侥幸过了,实际是dp;就留在此处以后再来看看dp吧;
学习:
1:事先开一个第一个数据来就会替代的初值,不要设置只读一次。
2:开一个key来保存数组的下标和值。
心得:
不能ac一定要自己想,自己去理清楚问题实质,相信自己!
#include<stdio.h>
int main(void)
{
int n=0;
while(scanf("%d",&n)!=EOF)
{
int str[1000],t=0,temp;
str[0]=0;/*第一次读取的数据一定大于这个,会开一个数组*/
while(n--)
{
scanf("%d",&temp);
int flag=1;
int key=str[t],keyj=t;
for(int j=t;j>=0;j--)
{
if(temp<=str[j])
{
flag=0;
str[keyj]=key;
key=str[j],keyj=j;/*还原上次被修改的数组,因为这个更接近面对导弹高度*/
str[j]=temp;
}
}
if(flag)
{
str[++t]=temp;
}
}
printf("%d\n",t);
}
return 0;
}