传送门:http://codeforces.com/contest/913/problem/C

n类物品,第i(i=0,1,2,...,n-1)类物品的价值为2i,花费为ci。任意选择物品,使得总价值至少为L。求此时的总花费的最小值。(n≤30,L≤109ci109

这是一个完全背包问题,但是鉴于数据规模,常规的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+12ci

ci+1≥ci:保证代价c的序列是上升的;

ci+12ci:保证性价比v/c的序列是上升的。

于是对于不满足约束的cici+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,花费cians(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的更多相关文章

  1. Codeforces Goodbye 2018

    Goodbye 2018 可能是我太菜考试的时候出不了$E$ 可能是我太菜考试的时候调不出$F$ 所以转化为手速场之后手速还上不去.jpg A 模拟题意... #include <cstdio& ...

  2. Codeforces Hello 2018 E题Logical Expression dp+最短路 好题

    j题目链接: http://codeforces.com/contest/913/problem/E 题意: 给你x,y,z三个变量,与&   或|  非!  括号()   四种运算符,规定括 ...

  3. 【CodeForces】913 C. Party Lemonade

    [题目]C. Party Lemonade [题意]给定n个物品,第i个物品重量为2^(i-1)价值为ci,每个物品可以无限取,求取总重量>=L的最小代价.1<=30<=n,1< ...

  4. Codeforces - Gym102028 - 2018 Jiaozuo Regional Contest

    http://codeforces.com/gym/102028 A. Xu Xiake in Henan Province 看起来像水题.乱搞一下,还真是. #include<bits/std ...

  5. Week Five

    2018.12.25 1.[BZOJ 4310] 2.[BZOJ 3879] 3.[BZOJ 2754] 4.[BZOJ 4698] 5.[Codeforces 914E] 6.[Codeforces ...

  6. Codeforces Avito Code Challenge 2018 D. Bookshelves

    Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...

  7. 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 ...

  8. Codeforces:Good Bye 2018(题解)

    Good Bye 2018! 题目链接:https://codeforces.com/contest/1091 A. New Year and the Christmas Ornament 题意: 给 ...

  9. 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 ...

随机推荐

  1. python库学习笔记——Pandas数据索引:ix、loc、iloc区别

    Different Choices for Indexing 1. loc--通过行标签索引行数据 1.1 loc[1]表示索引的是第1行(index 是整数) import pandas as pd ...

  2. [置顶] Snow的追寻

    题目描述 Snow终于得知母亲是谁,他现在要出发寻找母亲. 王国中的路由于某种特殊原因,成为了一棵有n个节点的根节点为1的树,但由于"Birds are everywhere.", ...

  3. Java事件处理机制- 事件监听器的四种实现方式

    自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: import javax.swing.*; import java.awt.*; i ...

  4. openstack instance bootmgr is missing 问题 修复

  5. 要自己当技术使用astgo运营网络电话系统,必须掌握的基本技术

    知道什么是centos 知道怎么远程访问centos服务器 (常用工具 Secure Shell Client.WINSCP) 知道重启服务器的命令是 reboot 知道你的服务器是没有图形界面的,所 ...

  6. 腾讯云linux服务器安装lnmp一键包

    这边域名已经实名了. 然后修改DNS服务器 然后备案吧 还是先不备案,直接云解析DNS 哦,想起来了,阿里云自己都可以生成SSL证书.重新弄一次吧,其实腾讯云也可以申请域名型免费版DV

  7. js:正则表达

    一:正则表达对象方法 1:compile()方法   //编译正则表达式 实例:在字符串中全局搜索“man”,并用“person”替换,然后通过compile()方法,改变正则表达式,用person替 ...

  8. HTML Email 编写指南

    今天,我想写一个"低技术"问题. 话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly.每周收到一封邮件,了解本周的大事. 有一天,我就在想, ...

  9. thinkphp关联操作

    比如:你要求删除用户的时候,同时删除与用户有关的所有信息. 一对一:  有 (HAS_ONE)   属于 (BELONGS_TO)    一对多:  有 (HAS_MANY)  属于 (BELONG_ ...

  10. [Swift通天遁地]七、数据与安全-(16)检测Apple设备是否越狱

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...