• hdu1257最少拦截系统


    又是一道坑爹的题目,明明数据都通过了,就是wrong anser

    #include "iostream"
    #include "string.h"
    using namespace std;
    struct {
      int x,index;
    }dp[1000];
    int find(int low,int high,int a){
      while(low<=high){
        int mid=(low+high)/2;
        if(dp[mid].x>=a)low=mid+1;
        else high=mid-1;
      }
      return low;
    }
    int main(){
      int n,i,num[1000],k,x,set[1000],len,longth;
      while(cin>>n){
        longth=n;
        for(i=1;i<=n;i++)cin>>num[i];
        memset(set,0,sizeof(set));
        for(k=1;;k++){
          memset(dp,0,sizeof(dp));
          x=1;
          while(set[x++]);
          dp[1].x=num[x-1];dp[1].index=x-1;set[x-1]=1;
          len=1;
          for(i=1;i<=n;i++){
            if(set[i]==0){
             int temp=find(1,len,num[i]);
             if(temp>len)len++;
             else {set[dp[temp].index]=0;}
             dp[temp].x=num[i];
             dp[temp].index=i;
             set[i]=1;
           }
          }
          //for(i=1;i<=len;i++)cout<<dp[i].x<<' ';cout<<endl;
          longth-=len;
          if(longth==0)break;
        }
        cout<<k<<endl;
      }
    }

    人家的代码

    //1273712 2009-04-15 16:57:00 Accepted 1257 0MS 280K 659 B C++ Xredman
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    const int N = 10000;
    
    int str[N];
    
    int main()
    {
        int cnt, n;
        int a, i, j;
        int minv, tmin;
        while(cin>>n)
        {
            scanf("%d", &a);
            cnt = 1;
            str[0] = a;
            for(i = 1; i < n; i++)
            {
                scanf("%d", &a);
                tmin = minv = -1;
                for(j = 0; j < cnt; j++)
                    if(str[j] - a  >= 0)
                    {
                        if(tmin == -1)
                        {
                            minv = j;
                            tmin = str[j] - a;
                        }
                        else if(str[j] - a < tmin)
                        {
                            minv = j;
                            tmin = str[j] - a;
                        }
                    }
                if(tmin == -1)
                    str[cnt++] = a;
                else
                    str[minv] = a;
             //for(j=0;j<cnt;j++)cout<<str[j]<<' ';cout<<endl;
            }
    
            cout<<cnt<<endl;
        }
        return 0;
    }
  • 相关阅读:
    deferred 对象
    JVM--------3
    JVM类加载机制————2
    JVM加载的初始化类
    补充==的使用和equals的区别
    MyBatis_SelectKey使用oracle 序列插入主键
    MySql_ procedure
    mysql function
    jsonp _____跨域请求实现
    shell(shell变量、条件表达式、流程控制)
  • 原文地址:https://www.cnblogs.com/dowson/p/3286592.html
Copyright © 2020-2023  润新知