程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU/HDOJ 1800 Flying to the Mars 搜索

HDU/HDOJ 1800 Flying to the Mars 搜索

編輯:C++入門知識

其實就是求單調最長不降子序列的個數,這題有很多方法,有用map的,有字典樹的,我的方法很簡單,標記搜索,提交不要選g++,會被卡超時,選c++即可。


[cpp] 
#include<iostream>  
#include<cstring>  
#include<algorithm>  
#include<cmath>  
#include<map>  
#include<cstdio>  
using namespace std; 
int level[3010]; 
bool visit[3010]; 
bool cmp(int a,int b){ 
    return a>b; 

int main() 

    int n; 
    while(cin>>n) 
    { 
        for(int i=0;i<n;i++) 
            scanf("%d",&level[i]); 
        memset(visit,0,sizeof(visit)); 
        sort(level,level+n,cmp); 
        int sum=0; 
        for(int i=0;i<n;i++) 
        { 
            if(visit[i])continue; 
            int k=i; 
            for(int j=0;j<n;j++) 
            { 
                if(visit[j])continue; 
                if(level[j]<level[k]){ 
                    visit[j]=1; 
                    k=j; 
                } 
            } 
            sum++; 
            visit[i]=1; 
        }    
        cout<<sum<<endl; 
    } 
    return 0; 

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<cstdio>
using namespace std;
int level[3010];
bool visit[3010];
bool cmp(int a,int b){
 return a>b;
}
int main()
{
 int n;
 while(cin>>n)
 {
  for(int i=0;i<n;i++)
   scanf("%d",&level[i]);
  memset(visit,0,sizeof(visit));
  sort(level,level+n,cmp);
  int sum=0;
  for(int i=0;i<n;i++)
  {
   if(visit[i])continue;
   int k=i;
   for(int j=0;j<n;j++)
   {
    if(visit[j])continue;
    if(level[j]<level[k]){
     visit[j]=1;
     k=j;
    }
   }
   sum++;
   visit[i]=1;
  } 
  cout<<sum<<endl;
 }
 return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved