首页 > 其他 > 详细

心急的C小加(两种解法)

时间:2015-06-05 06:08:41      阅读:294      评论:0      收藏:0      [点我收藏+]

心急的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 
样例输出
2
1
3
先贴下自己的dp超时代码:
#include<stdio.h>
#include<algorithm>
#define MAX(x,y) x>y?x:y
using namespace std;
struct Case{
    int L,W;
}strick[5001];
int cmp(Case a,Case b){
    if(a.L==b.L)return a.W<b.W;
    else return a.L<b.L;
}
int main(){
    int T,N,dp[5001],max;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&N);
        for(int i=0;i<N;++i){dp[i]=1;
        scanf("%d%d",&strick[i].L,&strick[i].W);
        }
        sort(strick,strick+N,cmp);
        max=0;
        for(int i=0;i<N;++i){
            for(int j=0;j<=i;++j){
                if(strick[j].W>strick[i].W)dp[i]=dp[j]+1;
                max=MAX(dp[i],max);
            }
        }
        printf("%d\n",max);
    }
    return 0;
}
借助大神理解解写的代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct Case{
    int L,W,dis;
};
struct Case stick[5001];
int cmp(Case a,Case b){
    if(a.L==b.L)return a.W<b.W;
    else return a.L<b.L;
}
int main(){int T,N,t,flot;
scanf("%d",&T);
while(T--){
    scanf("%d",&N);
    for(int i=0;i<N;++i)scanf("%d%d",&stick[i].L,&stick[i].W),stick[i].dis=1;
    sort(stick,stick+N,cmp);flot=0;
    for(int i=0;i<N;++i){
        if(stick[i].dis==0)continue;
        t=stick[i].W;
        for(int j=i+1;j<N;++j){
            if(stick[j].dis&&t<=stick[j].W)stick[j].dis=0,t=stick[j].W;
        }
        flot++;
    }
    printf("%d\n",flot);
}
    return 0;
}
/*题解:
结构体排序,一级排木棒的重量,二级排木棒的长度,均由小到大。
进行了多少次外层循环,就是花费的分钟数。
*/
若排序后,如图:
技术分享
则,花费了2分钟。 

心急的C小加(两种解法)

原文:http://www.cnblogs.com/handsomecui/p/4553462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!