problemI
2016-03-24 12:10
246 查看
简单题意:给n个木棍,进行加工,第一个需要1minute,如果后一个木棍的的长和宽比前一个都大于或者等于的话则不需要额外的加工时间,求最短的加工时间。
解题思路:先进行长度从小到大排序,如果长度相同,按照重量进行宽度从小到大排序,找出重量按照递增的一组进行标记,最终求出最短的加工时间。
感想:这题和problemB 是重复的,直接贴过来了
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct stick
{
int l;
int w;
};
stick wood[5005];
int vis[5005];
bool cmp(const stick &a,const stick &b)
{
if(a.l!=b.l)
return a.l<b.l;
else
return a.w<b.w;
}
int main()
{
int n,m,T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>wood[i].l>>wood[i].w;
vis[i]=0;
}
sort(wood,wood+n,cmp);
int cnt=0;
for(int i=0;i<n;i++)
{
if(vis[i])
continue;
m=wood[i].w;
for(int j=i+1;j<n;j++)
{
if(m<=wood[j].w&&!vis[j])
{
m=wood[j].w;
vis[j]=1;
}
}
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
解题思路:先进行长度从小到大排序,如果长度相同,按照重量进行宽度从小到大排序,找出重量按照递增的一组进行标记,最终求出最短的加工时间。
感想:这题和problemB 是重复的,直接贴过来了
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct stick
{
int l;
int w;
};
stick wood[5005];
int vis[5005];
bool cmp(const stick &a,const stick &b)
{
if(a.l!=b.l)
return a.l<b.l;
else
return a.w<b.w;
}
int main()
{
int n,m,T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>wood[i].l>>wood[i].w;
vis[i]=0;
}
sort(wood,wood+n,cmp);
int cnt=0;
for(int i=0;i<n;i++)
{
if(vis[i])
continue;
m=wood[i].w;
for(int j=i+1;j<n;j++)
{
if(m<=wood[j].w&&!vis[j])
{
m=wood[j].w;
vis[j]=1;
}
}
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
相关文章推荐
- Hibernate延迟加载技术详解
- 【Util】Android Toast封装
- POJ 3259 Wormholes spfa 判负环
- 机器学习基础(六)—— 交叉熵代价函数(cross-entropy error)
- Android Service简单总结
- java 连接数据库
- gdb调试应用程序
- Ajax轮询消息自动提示(消息盒子)
- 酷狗音乐模仿还在继续之UI界面源码下载
- Lua_第18 章 Table 库
- 关于Makefile的正确使用
- oracle11g静默安装20140623
- xcode修改工程名
- 如何通过热修复,搞定开发中的那些 Bug?
- “模仿”还是“创新”IT行业的抄袭事件
- (原创)jquery插件-可选可填控件
- LeetCode 338 Counting Bits(位运算)
- 如何通过热修复,搞定开发中的那些 Bug?
- TCP/IP面试题整理
- android.mk指定目标文件路径