Problem B

简单题意:锯木头,第一块木头的设定时间是1分钟,如果第二块木头的长和宽都不小于第一块的长和宽,不用重新设置,否则重新设置,计时器加1

解题思路:模拟题目过程,先按长度升序排列,初始化bool数组为0,根据题目条件进行比较,bool数组通过下标与每个元素进行联系,并记录每个数据是否符合条件,符合条件为1,不符合为0,直到bool数组全为1时结束循环。

感想:贪心算法想不出怎么表达= =

AC代码:

#include<iostream>

#include<fstream>
#include<algorithm>
using namespace std;
struct Wood{
    int l,w;
    int id; 
};
bool cmp(const Wood &a,const Wood &b)
{
    if(a.l<=b.l) return true ;
    else return false;
}
int main()
{
    //ifstream cin("b.txt");
    Wood w[5001];
    Wood w1[5001];
    bool b[5001];
    int n,i,j,k,flag,pre;
    cin>>n;
    
    while(cin>>n)
    {
        k=0;
        for(i=0;i<n;i++)
        {
            cin>>w[i].l>>w[i].w;
            b[i]=0;
        }
        sort(w,w+n,cmp);
        for(i=0;i<n;i++)
            w[i].id=i;
        
        flag = 1;
        while(flag==1)
        {
            k++;
            j=0;
            flag=0;
            for(i=0;i<n;i++)
            {
                if(b[i]==0) {
                    w1[j].l=w[i].l;
                    w1[j].w=w[i].w;
                    w1[j].id=w[i].id ;
                    j++;
                }
            }
                
            /*for(i=0;i<j;i++)
            cout<<w1[i].l << " " << w1[i].w << " " << w1[i].id <<endl;
            cout << endl;*/
            
            b[w1[0].id]=1;
            pre=0;
            for(i=1;i<j;i++)
            {
                if(w1[pre].l<=w1[i].l&&w1[pre].w<=w1[i].w){
                    b[w1[i].id]=1;
                    pre=i;
                }
            }
            
            //for(i=0;i<n;i++)
            //cout << b[i] ;
            //cout << endl;
            
            for(i=0;i<n;i++)
            {
                if(b[i]==0) {
                flag=1;
                break;
                }
            }
            
        }
        cout<<k<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值