noip模拟赛 abcd
【问题描述】
有4个长度为N的数组a,b,c,d。现在需要你选择N个数构成数组e,数组e满足
a[i]≤e[i]≤b[i]以及
并且使得
最大。
【输入格式】
输入文件名为abcd.in。
输入文件共 N+1 行。
第 1 行包含1个正整数N。
第 i+1 行包含4个整数a[i],b[i],c[i],d[i]。
【输出格式】
输出文件名为abcd.out。
输出共1行,包含1个整数,表示所给出公式的最大值。输入数据保证一定有
解。
【输入输出样例1】
| abcd.in | abcd.out |
| 5 - 1 1 2 5 -2 2 1 2 0 1 1 3 -2 -1 3 10 -2 2 3 9 |
2 |
【输入输出样例2】
| abcd.in | abcd.out |
| 10 1 10 1 7 -10 10 2 0 -10 10 2 2 -10 10 2 0 1 10 1 0 -10 10 2 0 |
90 |
分析:比较容易看出来这是一道多重背包的题.但是朴素做法肯定过不了,需要优化.比较常见的优化是二进制法和单调队列.这道题用二进制法比较好处理.
由于[ai,bi]中可能包含负数,所以需要对式子变形.
[ai,bi] ---> [0,bi-ai] + ai = ei. Σei*ci = 0,因为要让背包的容积是最大的,所以ei取bi-ai,那么Σei*ci = 0 ---> Σ(bi - ai)*ci + ai*ci = 0,移项,可以得到背包的容积为-Σai*ci.要最大化Σei*di ---> Σ(bi-ai)*di + ai*di.
这样变形后,ei的取值范围就变成了[0,bi-ai],就可以分解成二进制数来做了.
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, a[], b[], c[], d[], m,f[], ans, v[], w[], cnt; void init(int num, int x, int y)
{
for (int i = ; i <= num; i *= )
{
v[++cnt] = x * i;
w[cnt] = y * i;
num -= i;
}
if (num)
{
v[++cnt] = x * num;
w[cnt] = y * num;
}
} int main()
{
memset(f, - / , sizeof(f));
f[] = ;
scanf("%d", &n);
for (int i = ; i <= n; i++)
{
scanf("%d%d%d%d", &a[i], &b[i], &c[i], &d[i]);
m -= a[i] * c[i];
b[i] -= a[i];
ans += a[i] * d[i];
}
for (int i = ; i <= n; i++)
init(b[i], c[i], d[i]);
for (int i = ; i <= cnt; i++)
for (int j = m; j >= v[i]; j--)
f[j] = max(f[j], f[j - v[i]] + w[i]);
printf("%d\n", ans + f[m]);
return ;
}
noip模拟赛 abcd的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- bzoj 1725: [Usaco2006 Nov]Corn Fields牧场的安排【状压dp】
压一维状态,转移时把符合条件的上一行加上 #include<iostream> #include<cstdio> using namespace std; const int ...
- 搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子
版本 springboot 2.1.5.RELEASE kafka 2.2 遇到的坑 用最新的springboot就要用最新的kafka版本! 当我启动云服务器上的zk后,再启动kafka后台日志也没 ...
- fread/fwrite实现复制功能
1. fread/fwrite实现复制功能 #include <stdio.h> #include <stdlib.h> #define BUFFSIZE 4096 //执行 ...
- 思维题 UVA 10881 Piotr's Ants
题目传送门 /* 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 关键2:蚂蚁的相对位置不变 关键3:o ...
- Android 性能优化(11)网络优化( 7)Optimizing for Doze and App Standby
Optimizing for Doze and App Standby In this document Understanding Doze Doze restrictions Adapting y ...
- canvas学写一个字
第一步:画一个米字格,先画一个矩形,再画中间的米字. <script> window.onload = function(){ var canvas = document.getEleme ...
- Shell脚本,简单& 强大
摘自<码农增刊Linus与Linux>,章节:你可能不知道的Shell. 最近阅读完这本书,觉得其中有很多不错的内容,这是其中的一个Shell小甜点,拿来和大家一起分享一下,增加了 ...
- js调试技巧汇总中
由于设备多样性(PC.ios.安卓.pad.tv)以及各设备对js脚本支持性差异性.js兼容性调试显得越来越重要. 0:尽力模仿真实场景下进行调试,迅速定位问题以及提供解决方案. 1:setTimeo ...
- 专题五:TCP编程
前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来介绍下传输层协议——TCP协议,主要介绍下TCP协议的工作过程和基于TCP协议的一个简单的通信程序,下面就开始本专题的正文了. ...
- 后台管理进程GameMaster
初步准备在后台加一个进程,用来控制进程中的各种数据,修改,查看,删除玩家数据类似于后端的gm控制平台