背景:
是昨天校赛的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; }