心急的C小加

来源:互联网 发布:淘宝9.9包邮网 编辑:程序博客网 时间:2024/05/09 18:27

心急的C小加

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述

C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?

输入
第一行是一个整数T(1<T<1500),表示输入数据一共有T组。
每组测试数据的第一行是一个整数N(1<=N<=5000),表示有N个木棒。接下来的一行分别输入N个木棒的L,W(0 < L ,W <= 10000),用一个空格隔开,分别表示木棒的长度和质量。
输出
处理这些木棒的最短时间。
样例输入
3 5 4 9 5 2 2 1 3 5 1 4 3 2 2 1 1 2 2 3 1 3 2 2 3 1 
样例输出
213
来源
POJ改编
上传者

陈玉



该代码时间超限:#include<iostream>#include<cstring>#define MAXN 5000+10using namespace std;/*void swap(int *a,int *b){    int temp;    temp=*a;    *a=*b;    *b=temp;}*/int main(){    int t,n,l[MAXN],w[MAXN],i,j,count;    int vis[MAXN],last;    cin>>t;   // scanf("%d",&t);    while(t--)    {        count=0;        cin>>n;        memset(vis,0,sizeof(vis));        for(i=0;i<n;i++)            cin>>l[i]>>w[i];        for(j=0;j<n-1;j++)        {            for(i=0;i<n-j-1;i++)            {                if(l[i+1]<l[i])                {                    swap(l[i+1],l[i]);                    swap(w[i+1],w[i]);                }                if(l[i+1]==l[i])                {                    if(w[i+1]<w[i])                    {                        swap(l[i],l[j]);                        swap(w[i+1],w[i]);                    }                }            }        }        for(i=0;i<n;i++)        {            if(vis[i]==0)            {                count++;                last=w[i];                for(j=i+1;j<n;j++)                {                    if(vis[j]==0&&w[j]>=last)                    {                        vis[j]=1;                        last=w[j];                    }                }            }        }        cout<<count<<endl;    }    return 0;}


运用结构体完破时间超限,时间:660#include<iostream>#include<cstring>#include<algorithm>#define MAXN 5000+10using namespace std;struct T{    int l;    int w;    int vis;}t[MAXN];bool cmp(T a,T b){    if(a.l<b.l)        return 1;    else if(a.l==b.l&&a.w<b.w) return 1;    return 0;}int main(){    int sum,i,j,count,n,last;    cin>>sum;    while(sum--)    {        count=0;        memset(t,0,sizeof(t));        cin>>n;        for(i=0;i<n;i++)            cin>>t[i].l>>t[i].w;        sort(t,t+n,cmp);        for(i=0;i<n;i++)        {            if(t[i].vis==0)            {                count++;                last=t[i].w;                for(j=i+1;j<n;j++)                {                    if(t[j].vis==0&&t[j].w>=last)                    {                        t[j].vis=1;                        last=t[j].w;                    }                }            }        }        cout<<count<<endl;    }    return 0;}


0 0
原创粉丝点击