HDU 4122 单调队列
转载自:http://blog.csdn.net/lvshubao1314/article/details/46910271
DES :给出n个订单和m是商店的开放时间。然后n行给出n个订单的信息。然后给出t和s。表示一个月饼的保质期和保存一天的成本。最后m行,给出每个时刻做月饼的成本。问。完成订单的最少的成本是多少。
思路就是用单调队列保存每个点之前的可以为这个点做月饼的点。刚学了单调队列。在保存下标然后找到值哪里还是有一些混乱。
第一次错了。闰年是366天。搞混了。T_T。不过时间方面的计算还是。。有点蠢。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std; int time[];
int cost[];
int order[];
int inque[]; char mon[][] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; bool isleap(int year) {
if (year% == )
return true;
else if (year% && (year%==))
return true;
return false;
} int year_Day(int year) {
int ans = ;
for (int i=; i<year; ++i) {
if (isleap(i)) ans += ;
else ans += ;
}
return ans;
} int mon_Day(bool leap, int mon) {
switch (mon) {
case : return ;
case : return ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
case : return leap ? : ;
}
} int get_mnum(char monn[]) {
for (int i=; i<; ++i) {
if (strcmp(monn, mon[i]) == )
return i+;
}
} int getTime(char mon[], int dat, int year, int h) {
bool leap = isleap(year);
int ans = year_Day(year);
int m = get_mnum(mon);
ans += mon_Day(leap, m);
ans += dat-;
ans *= ;
ans += h;
return ans;
} int main() {
int n, m;
int t, s;
char monn[];
int dat, year, h, r;
while(cin >> n >> m) {
if (n == && m == ) break;
for (int i=; i<n; ++i) {
cin >> monn >> dat >> year >> h >> r;
time[i] = getTime(monn, dat, year, h);
//cout << time[i] << endl;
order[i] = r;
}
cin >> t >> s;
int tnum = ;
int ans = ;
int head=, tail=;
for (int i=; i<m; ++i) {
cin >> cost[i];
while(head < tail && cost[inque[tail-]]+s*(i-inque[tail-]) > cost[i])
tail--;
inque[tail++] = i;
while(i == time[tnum]) {
while(head<tail && i-inque[head]>t)
head++;
ans += order[tnum]*(cost[inque[head]]+s*(i-inque[head]));
tnum++;
}
}
cout << ans << endl;
}
return ;
}
HDU 4122 单调队列的更多相关文章
- Alice's mooncake shop HDU - 4122 单调队列
题意: 有n个订单和可以在m小时内制作月饼,制作月饼不考虑时间(即,你可以在一个时刻在所有需要的月饼都做完) 接下来是n个订单的信息:需要在mon月,d日,year年,h小时交付订单r个月饼 接下来一 ...
- HDU 3507 单调队列 斜率优化
斜率优化的模板题 给出n个数以及M,你可以将这些数划分成几个区间,每个区间的值是里面数的和的平方+M,问所有区间值总和最小是多少. 如果不考虑平方,那么我们显然可以使用队列维护单调性,优化DP的线性方 ...
- hdu 3530 单调队列最值
/** HDU 3530 单调队列的应用 题意: 给定一段序列,求出最长的一段子序列使得该子序列中最大最小只差x满足m<=x<=k. 解题思路: 建立两个单调队列分别递增和递减维护(头尾删 ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- hdu 3415(单调队列) Max Sum of Max-K-sub-sequence
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3415 大意是给出一个有n个数字的环状序列,让你求一个和最大的连续子序列.这个连续子序列的长度小于等于k. ...
- hdu 3401 单调队列优化+dp
http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others) Memor ...
- hdu 3415 单调队列
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 2191 - 单调队列优化多重背包
题目: 传送门呀传送门~ Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种 ...
- HDU 3530 单调队列
题目大意:给你n个数, 让你问你最长的满足要求的区间有多长,区间要求:MAX - MIN >= m && MAX - MIN <= k 思路:单调队列维护递增和递减,在加入 ...
随机推荐
- vue - nodejs
一.知识 打开Nodejs英文网:https://nodejs.org/en/ 中文网:http://nodejs.cn/ 我们会发现这样一句话: 翻译成中文如下: Node.js 是一个基于 Chr ...
- Qt::QWindow多窗口争抢置顶状态解决方案
有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上. Qt提供的置顶方式是在windowsflags上增 ...
- 浅谈vuex
很多技术,刚接触的时候:这是啥?用的时候:哟嚯,是挺好用的!加以研究:卧槽,就是这么个逼玩意儿! 最近接手了一个别人写了1/5的vue项目(页面画了1/3,接口啥都没对); 对于表格中的数据项操作以及 ...
- MongoDB: 原子性和事务
在MongoDB中, 文档级别的的写操作是原子性的, 甚至是在对某个文档的操作中修改其多个内嵌的子文档, 也是原子性的. 在一个写操作同时修改多个文档的情况, 对其中单独的某个文档而言是原子的, 但是 ...
- 迁移学习与fine-tuning有什么区别
假设你要处理一个新数据集,让你做图片分类,这个数据集是关于Flowers的,问题是,数据集中flower的类别很少,数据集中的数据也不多,你发现从零开始训练CNN的效果很差,很容易过拟合,怎么办呢,于 ...
- MySQL多个相同结构的表查询并把结果合并放在一起的语句(union all)
union all select *,'1' as category from table1001 where price > 10 union all select *,'2' as cate ...
- Django model中数据批量导入bulk_create()
在Django中需要向数据库中插入多条数据(list).使用如下方法,每次save()的时候都会访问一次数据库.导致性能问题: for i in resultlist: p = Account(nam ...
- 利用Flash XMLSocket实现”服务器推”技术
利用Flash XML Socket实现”服务器推”技术的基础是:1.Flash提供了XMLSocket类,服务器利用Socket向Flash发送数据:2.JavaScript和Flash的紧密结合, ...
- Frame 框架的创建
Qt 创建Frame框架的例子: QFrame * frm = new QFrame(this); //创建一个框架 frm->setFrameStyle(QFrame::StyledPanel ...
- html 音频
<!DOCTYPE html><meta charset="utf-8"><video src="movie.webm" cont ...