题目链接

题意概述:有n个人,第i个人打饭消耗ai时间,离开后吃饭耗费bi时间,将n个人分成两队,合理分配人员使总时间最短并输出总时间。

  我们把问题拆分为两个部分。首先是排列顺序,然后是怎么分到两个队伍中。

  显然吃饭越慢应该越早打饭,因为打饭总时间不变那么让吃的慢的人早开始吃会使总时间最小。

  那么现在我们只需要分一下人就好了。看一眼数据发现n<=200,可以使用随机分配。

  时间复杂度:O(跑的出来)

  

#include<cstring>
#include<iostream>
#include<cctype>
#include<cstdio>
#include<algorithm>
#include<ctime>
using namespace std;
inline int read()
{
register int X=;register char ch=;bool flag=;
for(;!isdigit(ch);ch=getchar()) if(ch=='-') flag=;
for(;isdigit(ch);ch=getchar()) X=(X<<)+(X<<)+ch-'';
return (flag ? -X : X);
}
inline void write(int x)
{
if(x>) write(x/);
putchar(x%+'');
}
int n;
struct person
{
int eat,get;
}p[];
int ans=;
int f[];
bool cmp(person xx,person yy){return xx.eat>yy.eat;}
int max(int a,int b){return a>b ? a : b;}
int min(int a,int b){return a>b ? b : a;}
int main()
{
n=read();
for(int i=;i<=n;i++)
p[i].get=read(),p[i].eat=read();
sort(p+,p+n+,cmp);
for(int i=;i<=;i++)
f[i]=(i& ? : );
while(clock()<)
{
random_shuffle(f+,f+);
int sum1=,sum2=,tot1=-,tot2=-;
for(int j=;j<=n;j++)
{
if(f[j] & )
sum1+=p[j].get,tot1=max(tot1,sum1+p[j].eat);
else
sum2+=p[j].get,tot2=max(tot2,sum2+p[j].eat);
if(tot1 > ans || tot2 > ans) break;
}
ans=min(ans,max(tot1,tot2));
}
printf("%d\n",ans);
}

  

最新文章

  1. Failed deleting my ephemeral node
  2. sh
  3. jquery easyui datagrid 分页详解
  4. Tomcat配置JNDI数据源
  5. sql根据表名获取字段及对应说明
  6. python3-day5(模块)
  7. hadoop技术基本架构
  8. Struts 2.x仍然明显落后于时代。 Struts 2.x这一类老牌Web MVC开发框架仅能用于开发瘦客户端应用,无法用来开发对于交互体验要求更高的应用。
  9. 开源免费的.NET图像即时处理的组件ImageProcessor
  10. 单元测试er——为什么真的真的要写单元测试
  11. 线程停止与volatile
  12. 在查询语句中使用 NOLOCK 和 READPAST
  13. AX_Query
  14. Web测试和App测试有什么区别
  15. 【BZOJ3174】[TJOI2013]拯救小矮人(贪心,动态规划)
  16. IEnumerable 与 IEnumerable&lt;T&gt;
  17. Keras序列模型学习
  18. 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
  19. P3317 [SDOI2014]重建(Matrix-tree+期望)
  20. MySQL笔记(3)---文件

热门文章

  1. win7系统 右击任务栏 资源管理器 弹出菜单“已固定”和“最近”项目不显示故障处理
  2. 网络编程中用到的SOCKET是什么?
  3. Linux环境下:vmware安装Windows报错误-无人参与应答文件包含的产品密钥无效
  4. xcode11新项目删除main.storyboard 两种方法
  5. SimHash算法--文章相似度匹配
  6. 指定细则 Small
  7. HTML 图像标签(img)
  8. java 不同时间格式转化
  9. 转:win10完美去除快捷方式小箭头
  10. Fedora 安装 MongoDB 教程