Codeforces Hello 2018 C - Party Lemonade
传送门:http://codeforces.com/contest/913/problem/C
有n类物品,第i(i=0,1,2,...,n-1)类物品的价值为2i,花费为ci。任意选择物品,使得总价值至少为L。求此时的总花费的最小值。(n≤30,L≤109,ci≤109)
这是一个完全背包问题,但是鉴于数据规模,常规的DP是不可取的(TLE+MLE)。
首先考虑到的是递归地搜索答案。对于当前状态(cur,k),对价值cur做一个简单的划分:商q=cur/vi,余数r=cur%vi。商作为不可继续划分的部分计算花费:qcost=q*vi*ci,对余数继续搜索rcost,状态为(r,i)。对于当前状态,枚举i=k,k-1,...,0,找到最小的qcost+rcost,作为当前状态的返回值。这个做法一定可以得到正确的答案,但是,如此会TLE。
接下来考虑这个问题的数据是否可以优化。首先考虑c数组:
首先确定c数组的目标状态。这个目标状态应该满足约束:ci≤ci+1≤2ci。
①ci+1≥ci:保证代价c的序列是上升的;
②ci+1≤2ci:保证性价比v/c的序列是上升的。
于是对于不满足约束的ci或ci+1,则约束之。
①ci=min(ci,ci+1);
②ci+1=min(ci+1,2ci)。
完成c数组的约束之后,可以简单地求解这个问题了。
在约束后,由于代价序列是上升的,因此应从价值最小的物品开始考虑;
由于性价比序列是上升的,因此每一次花费,应获得价值尽可能高的物品。
于是考虑L的二进制位,设获得第0~i位的物品,对应的总花费为ans(i)。
则当第i位为0时,不获得物品i,价值0,花费0:ans(i)=ans(i-1);
当第i位为1时,获得物品i,价值vi,花费ci:ans(i)=ans(i-1)+ci;
有一个例外的情况:当获得更高位的物品i+1所花费的ci+1≤ans(i)时,丢弃0~i位的所有物品,转而获得物品i+1:ans(i)=ci+1。
于是从低位到高位遍历即可。参考程序如下:
#include <stdio.h>
#include <stdint.h>
#define MAX_N 31 const int64_t inf = (int64_t)1e18;
int64_t c[MAX_N], v[MAX_N];
int64_t minc[MAX_N]; int64_t min(int64_t a, int64_t b)
{
return a < b? a: b;
} int main(void)
{
int n, l;
scanf("%d%d", &n, &l);
for (int i = ; i < n; i++) {
scanf("%d", &c[i]);
if (i) c[i] = min(c[i], 2LL * c[i - ]);
if (i) c[i - ] = min(c[i - ], c[i]);
v[i] = << i;
}
for (int i = n; i < MAX_N; i++)
c[i] = 2LL * c[i - ];
int64_t ans = 0LL;
for (int i = ; i < MAX_N - ; i++) {
int p = << i;
if (l & p) ans += c[i];
ans = min(ans, c[i + ]);
}
printf("%I64d\n", ans);
return ;
}
Codeforces Hello 2018 C - Party Lemonade的更多相关文章
- Codeforces Goodbye 2018
		
Goodbye 2018 可能是我太菜考试的时候出不了$E$ 可能是我太菜考试的时候调不出$F$ 所以转化为手速场之后手速还上不去.jpg A 模拟题意... #include <cstdio& ...
 - Codeforces Hello 2018  E题Logical Expression dp+最短路 好题
		
j题目链接: http://codeforces.com/contest/913/problem/E 题意: 给你x,y,z三个变量,与& 或| 非! 括号() 四种运算符,规定括 ...
 - 【CodeForces】913 C. Party Lemonade
		
[题目]C. Party Lemonade [题意]给定n个物品,第i个物品重量为2^(i-1)价值为ci,每个物品可以无限取,求取总重量>=L的最小代价.1<=30<=n,1< ...
 - Codeforces - Gym102028 - 2018 Jiaozuo Regional Contest
		
http://codeforces.com/gym/102028 A. Xu Xiake in Henan Province 看起来像水题.乱搞一下,还真是. #include<bits/std ...
 - Week Five
		
2018.12.25 1.[BZOJ 4310] 2.[BZOJ 3879] 3.[BZOJ 2754] 4.[BZOJ 4698] 5.[Codeforces 914E] 6.[Codeforces ...
 - Codeforces Avito Code Challenge 2018 D. Bookshelves
		
Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...
 - Codeforces 1023 A.Single Wildcard Pattern Matching-匹配字符 (Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Fi)
		
Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) A. Single Wildcard Patter ...
 - Codeforces:Good Bye 2018(题解)
		
Good Bye 2018! 题目链接:https://codeforces.com/contest/1091 A. New Year and the Christmas Ornament 题意: 给 ...
 - Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861C  Did you mean...【字符串枚举,暴力】
		
C. Did you mean... time limit per test:1 second memory limit per test:256 megabytes input:standard i ...
 
随机推荐
- network adapter
			
1 network adapter 网络适配器,也叫网卡,是一个硬件. 2 关于以太网卡 以太网卡分为光纤以太网卡和电口以太网卡. 3 常用的以太网卡 3.1 AMD PCNet PCI II (Am ...
 - ios11--播放音效
			
// // ViewController.m // 10-iOS中播放音效 // // Created by xiaomage on 15/12/26. // Copyright © 2015年 小码 ...
 - e.printStackTrace()介绍
			
public void printStackTrace()将此 throwable 及其追踪输出至标准错误流.此方法将此 Throwable 对象的堆栈跟踪输出至错误输出流,作为字段 System.e ...
 - MSP430:管脚的第二功能选择
			
之前在使用PWM,AD时候用到过第二功能,不过都是copy没有注意过PXSEL究竟怎么设置,今天在设置晶振管脚时候遇到了麻烦,细致看了一下其实很简单,在SPEC的最后详细讲了每个管脚如何设置为其他功能 ...
 - oracle 误删数据
			
insert into hr.job_history select * from hr.job_history as of timestamp to_timestamp('2007-07-23 10: ...
 - 【BZOJ4566_洛谷3181】[HAOI2016]找相同字符(SAM)
			
自己yy的方法yyyyyyyy着就A了,写篇博客庆祝一下. 题目: 洛谷3181 分析: SAM(可能是)模板题(不会SAM的同学戳我:[知识总结]后缀自动机的构建). 对\(s1\)建出SAM,用\ ...
 - android ListView,GridView 设置某一项显示位置
			
在项目中有时会用到,当使用 listview 想让它显示某一项,当它又不在前面的位置,可以 使用 //让某一项显示出来(否则可能不在当前) listview.setSelection(positio ...
 - 海量文本信息查Top-k
			
问题描述: 有1千万条短信,一条一行,有重复.在5分钟之内,找出重复出现的前10条. 方案一: 1.分组进行边扫描边建散列表.建立哈希表,使用头,尾和中间随便两个字节作为Hash Code, 插入到H ...
 - [Windows Server 2003] ASP.net安装方法
			
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装ASP.n ...
 - json 新用
			
如果使用struts2的action,可以省去属性赋值的工夫. 但是假如你没有使用struts2,而且使用的是ajax请求,通过json来传递参数.那我下面所说的对你可能是一个很好的解脱,从此告别re ...