2016sdau课程练习专题一 1001 problemB
来源:互联网 发布:微信公众号授权域名 编辑:程序博客网 时间:2024/05/19 20:19
1.题目编号
1001 problemB
2.简单题意
将木棍放在机器里处理,第一根需要一分钟,剩余的如果大于等于前边放入的长度和重量,就不用费时间,否则需要一分钟,计算给出一组数的最少时间.
3.解题思路
使用贪心算法来解本题,首先按照木棍长度和重量由小到大排列,然后比较不同的木棍长度,若后一个长度和重量都大于前一个则总时间不变否则加一分钟.
4.感想
关于贪心算法的一种实例,在定义排序时挺难的,并不好做
5.代码
#include<iostream>
#include<algorithm>
#include<cstring>
#define SIZE 5000
using namespace std;
struct wood
{
int l;
int w;
int flag;
}wod[SIZE];
bool cmp(wood a,wood b)
{
if(a.l==b.l) return a.w<b.w;
else if(a.l<b.l)return true;
else return false;
}
int main()
{
int T,J;
cin>>T;
for(J=0;J<T;J++)
{
int n;
cin>>n;
int time,length,weight;
memset(wod,0,sizeof(wod));
int a,b;
for(a=0;a<n;a++)
{
cin>>wod[a].l >>wod[a].w ;
}
sort(&wod[0],&wod[n],cmp);
wod[0].flag=1;
length=wod[0].l ;
weight=wod[0].w ;
time=1;
for(a=1;a<n;a++)
{
for(b=a;b<n;b++)
{
if(!wod[b].flag&&wod[b].l>=length&&wod[b].w>=weight)
{
length=wod[b].l;
weight=wod[b].w;
wod[b].flag = 1;
}
}
for(b=1;b<n;b++)
{
if(!wod[b].flag) break;
}
a=b;
if(a==n) break;
length=wod[a].l;
weight=wod[a].w;
wod[a].flag= 1;
time++;
}
cout<<time<<endl;
}
}
- 2016sdau课程练习专题一 1001 problemB
- 2016sdau课程练习专题二 1001
- 2016sdau课程练习专题三 1001
- 2016sdau课程练习专题四 1001
- 2016sdau课程练习专题一 1004 problemE
- 2016sdau课程练习专题一 1000 problemA
- 2016sdau课程练习专题一 1008 problemI
- 2016sdau课程练习专题一 1006 problemG
- 2016sdau课程练习专题一 1016 problemQ
- 2016sdau课程练习专题一 1012 problemM
- 2016sdau课程练习专题一 1005 problemF
- 2016sdau课程练习专题一 1013 problemN
- 2016SDAU课程练习一1001
- 2016SDAU课程练习一1001
- 2016sdau课程练习专题二 1002
- 2016sdau课程练习专题二 1003
- 2016sdau课程练习专题二 1008
- 2016sdau课程练习专题二 1017
- 第五章项目1——(5)三角形类雏形
- oracle PL安装
- 怎样从10亿查询词找出出现频率最高的10个
- Quartz任务调度(4)JobListener分版本超详细解析
- 调试方式
- 2016sdau课程练习专题一 1001 problemB
- 百度实习生 一面
- 第五周项目1-三角形类雏形(5)
- (二)electron 文件系统访问
- C++中引用详解
- Quartz任务调度(5)TriggerListener分版本超详细解析
- UIImagePickerController, UISearchBar
- Android ListView监听上滑或下滑动作
- 简单的关机打卡的java代码