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 思路:单调队列维护递增和递减,在加入 ...
随机推荐
- scrapy爬虫系列之五--CrawlSpider的使用
功能点:CrawlSpider的基本使用 爬取网站:保监会 主要代码: cf.py # -*- coding: utf-8 -*- import scrapy from scrapy.linkextr ...
- Windows上的巧克力味Chocolatey详解
Chocolatey是什么?很简单,Chocolatey就是Windows系统的yum或apt-get. 一.Chocolatey介绍 Chocolatey是一款专为Windows系统开发的.基于Nu ...
- 【开发者笔记】c# 调用java代码
一.需求阐述 java实现的一个算法,想翻译成c#,翻译代码之后发现有bug,于是不调试了.直接将jar打包成dll拿来用. 二.原理说明 jar可以通过ikvmc工具打包成dll,然后在项目中引入该 ...
- 嵌入式linux内核制作、根文件系统制作
嵌入式系统构成: 主要由bootloader.kernel.以及根文件系统三部分组成. 内核制作步骤: 制作嵌入式平台使用的linux内核制作方法与pc平台上的linux内核基本一致 1.清除原有配置 ...
- 前端基础(JavaScript)2
3.2 Array对象 3.2.1 数组创建 创建数组的三种方式: 创建方式1: var arrname = [元素0,元素1,….]; // var arr=[1,2,3]; 创建方式2: var ...
- cocos代码研究(25)Widget子类PageView学习笔记
基础理论 ListView控件是一个显示滚动项目列表的视图组. 列表项是通过使用addChild或insertDefaultItem插入到列表中的,继承自ScrollView. 代码实践 static ...
- 线程、进程、daemon、GIL锁、线程锁、递归锁、信号量、计时器、事件、队列、多进程
# 本文代码基于Python3 什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...
- SQL: coalesce()函数
①用途: 将空值替换成其他值 返回第一个非空值 ②表达式: COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达 ...
- 通过J2EE Web工程添加Flex项目,进行BlazeDS开发
http://www.cnblogs.com/noam/archive/2010/07/22/1782955.html 环境:Eclipse 7.5 + Flex Builder 4 plugin f ...
- Aliexpress API 授权流程整理(转载)
前言 我零零总总用了好几个月的时间,写了一个自用的小程序,从 Aliexpress 上抓取订单的小程序.刚开始写的时候,该API还没有开放,而且没有订单相关的功能.我完全是通过模拟用户在网页上的操作来 ...