Hdu 1257 (Two Methods)

No.1:

 1 #include<iostream>

 2 #include<memory.h>

 3 #include<fstream>

 4 #include<string>

 5 #include<algorithm>

 6 #include<math.h>

 7 #include<stack>

 8 #include<queue>

 9 #include<set>

10 #include<map>

11 #include<vector>

12 #include<stdio.h>

13 #include<stdlib.h>

14 #include<cstdio>

15 #include<cstdlib>

16 #include<cstring>

17 #include<cmath>

18 

19 using namespace std;

20 

21 typedef long long LL;

22 typedef long double real;

23 typedef vector<int> VI;

24 

25 

26 /**************************************************************

27     Problem:

28     Ordering:

29     Thought:

30     Result:

31 ****************************************************************/

32 

33 

34 #define INF 0x3f3f3f3f

35 #define MINN -0x3f3f3f3f

36 #define MAXN 0x3f3f3f3f

37 #define MOD 10007

38 #define NUM 5002

39 

40 

41 int n;

42 int a[NUM];

43 int dp[NUM];

44 ///最长不下降子序列

45 int LIS()

46 {

47     int res=0;

48     for(int i=0;i<n;i++)

49     {

50         dp[i]=1;

51         for(int j=0;j<i;j++)

52             if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+1);

53         res=max(res,dp[i]);

54     }

55     return res;

56 }

57 

58 int main()

59 {

60     //freopen("dev.in","r",stdin);

61     //freopen("out.out","w",stdout);

62 

63     while(scanf("%d",&n)!=EOF)

64     {

65         for(int i=0;i<n;i++) scanf("%d",&a[i]);

66         printf("%d\n",LIS());

67     }

68 

69     return 0;

70 }

No.2:

 1 /*

 2 HDU 1257

 3 by kuangbin

 4 为了使得使用的拦截系统最少,自然是要考虑使用与当前高度最接近的系统拦截(应该是贪心算法)

 5 */

 6 #include<stdio.h>

 7 #define INF 0x7ffffff

 8 #define MAXN 10000

 9 int dp[MAXN];//dp[i]代表第i个导弹当前拦截的高度

10 int main()

11 {

12     int n,x,i,res,flag;

13     int minh;

14     while(scanf("%d",&n)!=EOF)

15     {

16         res=0;

17         while(n--)

18         {

19             scanf("%d",&x);

20             flag=0;

21             minh=INF;

22             int tempi;            

23             for(i=0;i<res;i++)

24             {

25                 if(x<=dp[i]&&minh>dp[i]-x)

26                 {

27                     minh=dp[i]-x;

28                     //dp[i]=x;

29                     tempi=i;

30                     flag=1;

31                 }    

32             }

33             if(flag==0)

34             {

35                 dp[res]=x;

36                 res++;

37             }        

38             else dp[tempi]=x;

39         }

40         printf("%d\n",res);    

41     }    

42     return 0;

43 }

 

你可能感兴趣的:(method)