1899: [Zjoi2004]Lunch 午餐
来源:互联网 发布:马克加索尔数据 编辑:程序博客网 时间:2024/04/28 19:48
题目链接
题目大意:有n个人,2个窗口,每个人有固定的吃饭和打饭时间,到1窗口和2窗口的打饭时间和吃饭时间都是一样的,问所有人吃完饭的最早时间
题解:如果只有一个窗口的话就是蓝书第一章某贪心例题,按照吃饭时间降序排序
然后2个窗口……保留贪心策略,dp出奇迹,但是我不知道怎么定义状态……后来发现不需要知道某个人在哪个窗口,只需要知道某个窗口的时间就行了……
两个窗口独立,可以分开考虑
我的收获:分清楚有用的状态,大胆设计……
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int M=205;#define INF 0x3f3f3f3fint n,sum[M];int f[M][M*M];struct abc{int d,e;}a[M];bool operator <(abc x,abc y){return x.e>y.e;}void DP(){ memset(f,0x3f,sizeof(f));f[0][0]=0; for(int i=1;i<=n;i++) for(int j=0;j<=sum[i];j++){ f[i][j]=min(f[i][j],max(f[i-1][j],sum[i]-j+a[i].e)); if(j>=a[i].d) f[i][j]=min(f[i][j],max(f[i-1][j-a[i].d],j+a[i].e)); }}void work(){ DP(); int ans=INF; for(int i=0;i<=sum[n];i++) ans=min(ans,f[n][i]); cout<<ans<<endl;}void init(){ cin>>n; for(int i=1;i<=n;i++) scanf("%d%d",&a[i].d,&a[i].e); sort(a+1,a+1+n); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i].d;}int main(){ init(); work(); return 0;}
阅读全文
0 0
- 1899: [Zjoi2004]Lunch 午餐
- bzoj 1899: [Zjoi2004]Lunch 午餐
- [BZOJ]1899: [Zjoi2004]Lunch 午餐 DP
- bzoj1899 [Zjoi2004]Lunch 午餐(dp)
- 【BZOJ】【P1899】【ZJOI2004】【Lunch 午餐】【题解】【DP】
- 【贪心+DP】BZOJ1899(Zjoi2004)[Lunch 午餐]题解
- 【洛谷1489】猫狗大战&【BZOJ1899】【ZJOI2004】Lunch午餐
- [BZOJ 1899] ZJOI 2004 Lunch 午餐 · 动态规划
- Breakfast or lunch? 早餐还是午餐?
- Lesson 02 Breakfast or lunch? 早餐还是午餐?
- 没有免费的午餐理论 No Free Lunch Theorem
- 没有免费的午餐定理 NFL:(No Free Lunch Theorem)
- lunch
- BZOJ 1899 午餐 (洛谷P2577)
- [ZJOI2004]树的果实
- [ZJOI2004]沼泽鳄鱼
- 省选专练ZJOI2004书架
- 公司午餐
- 使用ET2000和Wireshak分析Ethercat主站的实时性
- Ubuntu 16.04 上的 NGINX Web 服务器!
- CSDN博客积分规则
- SPSS数据分析流程经验总结
- Centos6.8 下 Node.js 的安装
- 1899: [Zjoi2004]Lunch 午餐
- 最长最短单词
- Stanford Core NLP 安装
- 一款图片选择器,模仿微信的 ui,实现了 图片选取,图片预览 ,拍照 功能
- 二叉树
- java去除字符串中的空格、回车、换行符、制表符
- 判断是否是平衡二叉树
- Unity3D 最简单的优化建议
- 如何理解窗口函数