贪心算法1000
题目大意:
有若干房间,奇数房间在偶数房间的对面,共用一条走廊,从一个房间搬运桌子到另一个房间,如果房间之间共用同一个走廊,则不能同时进行,搬运以此需要10,求最短时间;
解题思路:
首先对房间按照开始房间号进行排序,在进行化简,1号和二号房间共用同一个走廊,开始房间和结束房间加一除二为走廊,搬桌子可以并行执行,遇到冲突需要分别执行,记录冲突最多的走廊为所求结果;
代码:
#include <iostream> #include <algorithm> using namespace std; struct mm { int a; int b; }s[401]; bool cmp(mm m,mm n) { if(m.a<=n.a) return true; return false ; } int main() { int n,N,u,i,j,max[201],t=0; cin>>N; while(N-->0) { for(int p=0;p<200;p++) max[p]=0; t=0; cin>>n; for(i=0;i<n;i++) { cin>>s[i].a>>s[i].b; if(s[i].a>s[i].b) { u=s[i].a; s[i].a=s[i].b; s[i].b=u; } s[i].a=(s[i].a+1)/2; s[i].b=(s[i].b+1)/2; for(j=s[i].a;j<=s[i].b;j++) max[j]++; } for(i=0;i<200;i++) { if(max[i]>t)t=max[i]; } cout<<t*10<<endl; } return 0; }