NYOJ220&&HDU1050--Move tables
来源:互联网 发布:怎么设计一个软件 编辑:程序博客网 时间:2024/05/21 10:17
【题意】:给你一些房间编号,让你按要求移动桌子,区间【a,b】表示要把桌子从a号房间移动到b号房间,注意之后还会有区间移动,但是要注意之前的区间内房间之间的走廊已被占用,求出按要求移动所有桌子的最小时间。
链接: click here
思路:在定义的结构体里面再加一个visit变量,用于是否标记,然后按开始时间升序排列,从i=0开始遍历,首先找到未visit的区间,如果找到,则num+=10(后面就开始寻找和这个区间能够同时搬运的区间),保留第i个区间的结束处last,然后嵌套遍历,j从i+1到n-1,若第j个区间的开始大于last,则在这10分钟内可以同时用第j个区间,修改last,标记第j个区间为已经visit。
还有一个思路:其实就是区间选择不相交问题,nyoj将其分类为贪心的题,其实可以用重叠的思路,不妨这样设想,将2,1房间,4,3,房间,6,5,房间统一考虑,将他们的空地分别标记为room[i], 如果你想把东西从n搬到m,那么自然的空地room[(n+1)/2]到空地room[(m+1)/2]都会用到,将这里标记上。然后重复,最后数组中重叠数最多的,必定会冲突到得次数,所以答案为最大的room[i]*10(分钟)。
链接: click here
思路:在定义的结构体里面再加一个visit变量,用于是否标记,然后按开始时间升序排列,从i=0开始遍历,首先找到未visit的区间,如果找到,则num+=10(后面就开始寻找和这个区间能够同时搬运的区间),保留第i个区间的结束处last,然后嵌套遍历,j从i+1到n-1,若第j个区间的开始大于last,则在这10分钟内可以同时用第j个区间,修改last,标记第j个区间为已经visit。
还有一个思路:其实就是区间选择不相交问题,nyoj将其分类为贪心的题,其实可以用重叠的思路,不妨这样设想,将2,1房间,4,3,房间,6,5,房间统一考虑,将他们的空地分别标记为room[i], 如果你想把东西从n搬到m,那么自然的空地room[(n+1)/2]到空地room[(m+1)/2]都会用到,将这里标记上。然后重复,最后数组中重叠数最多的,必定会冲突到得次数,所以答案为最大的room[i]*10(分钟)。
两种代码:
#include<cstdio>#include<cmath>#include<ctime>#include<queue>#include<stack>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;#define max(a,b) a>b?a:b#define min(a,b) a>b?b:a#define LL long long#define mem(a,b) memset(a,b,sizeof(a))int dir[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};#define PI 3.1415926struct node{ int i,j,visit;} room[201];int ans[201];bool cmp(node x,node y){ if(x.i!=y.i) return x.i<y.i;}int main(){ //mem(room,0); int t,n,m,i,j; scanf("%d",&t); while(t--) { int cmx,cmy; int ss=0; scanf("%d",&n); mem(room,0); for(i=0; i<n; i++) { scanf("%d%d",&cmx,&cmy); cmx=(cmx+1)/2,cmy=(cmy+1)/2;//比如3,4 都要化成2 if(cmx>cmy) { int tt=cmx; cmx=cmy; cmy=tt; // swap(cmx,cmy); } room[i].i=cmx,room[i].j=cmy; } sort(room,room+n,cmp); for(i=0; i<n; i++) { if(room[i].visit==0) { //ru guo chan guan=0; ss+=10; int last=room[i].j; for(j=i+1; j<n; j++) { if(room[j].visit==0&&room[j].i>last) { room[j].visit=1; last=room[j].j; } } } } printf("%d\n",ss); } return 0;}/*3410 2030 4050 6070 8021 32 200310 10020 8030 50*/第二种:
#include<cstring>#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int a[202];int main(){ int n,m,i,j; scanf("%d",&n); while(n--) { int aa,bb; scanf("%d",&m); memset(a,0,sizeof(a)); for(i=0;i!=m;i++) { scanf("%d%d",&aa,&bb); if(aa>bb) swap(aa,bb); for(j=(aa-1)/2;j<=(bb-1)/2;j++) a[j]++; } printf("%d\n",*max_element(a,a+202)*10); } return 0;}
0 0
- NYOJ220&&HDU1050--Move tables
- hdu1050&&nyoj220 Moving Tables(贪心)
- HDU1050 Moving Tables
- HDU1050-Moving Tables
- HDU1050 Moving Tables
- hdu1050 Moving Tables
- HDU1050 Moving Tables
- HDU1050 Moving Tables
- hdu1050 Moving Tables
- HDU1050:Moving Tables
- HDU1050-Moving Tables
- HDU1050 Moving Tables 【模拟】
- 贪心 hdu1050 Moving Tables
- HDU1050 Moving tables
- hdu1050 Moving tables
- HDU1050 Moving Tables
- Hdu1050 Moving Tables
- Moving Tables hdu1050
- socket和serversocket
- 为什么要encodeURI(url)两次才不会出现乱码
- python程序有问题:错误提示:IndentationError:expected an indented block!
- github for linux
- c/c++基础(十八) #pragma pack
- NYOJ220&&HDU1050--Move tables
- div锁定页面
- 封装自己的日志函数
- css 漂浮底部 漂浮顶部
- VS2010输出debug版本dll和lib
- HDU1158_Employment Planning【DP】
- PTHREAD_MUTEX_INITIALIZER如何理解
- ceph存储 ceph集群auth设置
- 如何更改Linux yum源