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 思路:单调队列维护递增和递减,在加入 ...
随机推荐
- python设置redis过期时间
import time import redis if __name__ == "__main__": try: conn=redis.StrictRedis(host='192. ...
- F(N)---hdu2802(寻找循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2802 f[1] = 1; f[2] = 7; f[n] = (f[n-2] - (n-1)*(n-1) ...
- Tickets---hdu1260 (简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题意就是有n个人排队买票,每个人需要的时间是a[i] (1=< i <=N),但是现 ...
- 【Python】如何取到input中的value值?
练习:取到下方链接下所有海贼王的下载链接. # coding=utf-8 from selenium import webdriver from time import sleep import ke ...
- 重定向、feed输出:控制台输出的内容存放到文件
重定向.feed输出:控制台输出的内容存放到文件 1.重定向 os.system('wget -r -p -np -k http://www.baidu.com/ -o wget.log' ) 2.f ...
- Underscore.js (1.7.0)-函数预览
集合(Collections)(25) - each - map - reduce - reduceRight - find - filter - where - findWhere - reject ...
- python 面向对象高级应用(三)
目录: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__getattr__ 二次加工标准类型(包装) __ ...
- java-Unsupported major.minor version 52.0错误解决
java-Unsupported major.minor version 52.0错误解决 eclipse版本设置不对, 低版本不能兼容高版本 eclipse中: windows -> pref ...
- php中0与空 Null false的区别
<?php $test=0; if($test==''){ echo '<br />在php中,0即为空'; //被输出 } if($test===''){ echo '< ...
- Spring—Ioc
IoC容器,最主要的就是完成对象的创建以及维护对象的依赖关系等. 所谓控制反转,包括两部分:一是控制,二是反转,就是把传统方式需要由代码来实现对象的创建.维护对象的依赖关系,反转给容器来帮忙管理和实现 ...