解题:USACO13NOV No Change
在朴素中透着一点新意的状压DP
一个很暴力的思路是枚举位置,状态和硬币,每次二分出向前最多能买到哪里,复杂度爆炸($O(2^knklog$ $n)$)
考虑优化,不妨先预处理一下$goal[i][j]$表示每个硬币$i$在每个位置$j$最多向前能买到哪里,但是这样还是很爆炸,所以我们找来了一个不同寻常的dp状态
我们设$dp[s]$表示在$s$状态下最远能到达哪里,于是有了一个清奇的转移方程$dp[s|(1<<coin)]=max(dp[s|(1<<coin)],goal[coin][dp[s]]$,这样就可以$O(2^kk)$转移啦
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int K=,N=;
long long val[K],goal[N][K];
long long pri[N],fsum[N],dp[<<];
long long k,n,all,ans=-;
int s(int x)
{
return <<(x-);
}
int main ()
{
scanf("%lld%lld",&k,&n),all=(<<k)-;
for(int i=;i<=k;i++)
scanf("%lld",&val[i]);
for(int i=;i<=n;i++)
scanf("%d",&pri[i]),fsum[i]=fsum[i-]+pri[i];
for(int i=;i<n;i++)
for(int j=;j<=k;j++)
{
int l=i+,r=n,ed=i;
while(l<=r)
{
int mid=(l+r)/;
if(fsum[mid]-fsum[i]>val[j]) r=mid-;
else l=mid+,ed=mid;
}
goal[i][j]=ed;
}
for(int i=all;i;i--)
for(int j=;j<=k;j++)
if(i&s(j)) dp[i^s(j)]=max(dp[i^s(j)],goal[dp[i]][j]);
for(int i=;i<=all;i++)
if(dp[i]==n)
{
long long cnt=;
for(int j=;j<=k;j++)
if(i&s(j)) cnt+=val[j];
ans=max(ans,cnt);
}
printf("%lld",ans);
return ;
}
解题:USACO13NOV No Change的更多相关文章
- 状压 DP:[USACO06NOV] Corn Fields,[USACO13NOV] No Change
[USACO06NOV] Corn Fields (试题来源:Link ) 题目描述 Farmer John has purchased a lush new rectangular pasture ...
- Luogu3092:[USACO13NOV]No Change
题面 传送门 Sol 状压一下\(k\),\(f[S]\)表示用过的硬币集合为\(S\)能买到的物品个数 # include <bits/stdc++.h> # define RG reg ...
- [USACO13NOV]No Change
题目大意: 你有k(k<=16)个硬币,每个硬币都有自己的面值. 现在你要给n件商品付钱,每件商品也有自己的价格. 然而老板是个奸商,他绝对不会给你找钱. 你每次付钱只能用一个硬币,但是你可以一 ...
- [USACO13NOV]没有找零No Change [TPLY]
[USACO13NOV]没有找零No Change 题目链接 https://www.luogu.org/problemnew/show/3092 做题背景 FJ不是一个合格的消费者,不知法懂法用法, ...
- 洛谷P3092 [USACO13NOV]没有找零No Change
P3092 [USACO13NOV]没有找零No Change 题目描述 Farmer John is at the market to purchase supplies for his farm. ...
- 【LeetCode】518. Coin Change 2 解题报告(Python)
[LeetCode]518. Coin Change 2 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目 ...
- 【LeetCode】860. Lemonade Change 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- 洛谷 P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
随机推荐
- ats Linux Bridge内联
Linux可以配置为在桥接模式下运行. 为网桥分配了两个或更多物理接口. 在接口之间共享单个IP地址. 默认情况下,任何到达一个接口的数据包都会立即路由到另一个网桥接口. 需要的Linux包: bri ...
- docker中创建MySQL及在外部使用Navicat连接
1:获取MySQL镜像 运行 docker pull mysql [root@MyCentos7- ~]# docker pull mysql Using default tag: latest la ...
- PHP正则表达式匹配俄文字符
之前弄过匹配中文的 见 http://www.cnblogs.com/toumingbai/p/4688433.html preg_match_all("/([\x{0400}-\x{04F ...
- can总线实现stm32的IAP
使用stm32f105rct6的can通信做IAP,实现固件的远程更新功能.IAP的实现包括两个程序:BootLoader和应用程序.启动过程先启动BootLoader,等待1s,若接收到烧写指令则开 ...
- python2.7 倒计时
From: http://www.vitostack.com/2016/06/05/python-clock/#more Python公告 Python 发布了一个网站 http://pythoncl ...
- 忘记本地MySQL数据库密码的解决方案。
忘记本地MySQL数据库密码,解决方案,分以下10个步骤: 参考链接: https://blog.csdn.net/weidong_y/article/details ...
- 第四节 Linux目录文件及文件基本操作
一.Linux目录结构 Linux 的目录与 Windows 的目录的区别: 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘 ...
- HDU 5925 Coconuts 离散化
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5925 Coconuts Time Limit: 9000/4500 MS (Java/Others) ...
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (五) 树莓派单子节点发送数据
本项目中各个节点和树莓派的通信不区分信道,因此如果由树莓派发送给特定节点的数据会被所有节点接收到,因此子节点可以判别该数据是否发给自己的,需要在数据的第二个字节中加入目标节点的编号(第一个字节为源节点 ...
- mac下搭建MySql环境
准备工作做完后,开始: 创建数据库 step1: 在mac中->系统偏好设置->最下边点MySQL 在弹出页面中 关闭mysql服务(点击stop mysql server) step2: ...