当前位置: 首页 > news >正文

2018.10.23-dtoi-1770不设找零No Change (nochange)

题目描述:

FJ正在市场上为他的农场采购日用品,他口袋里有K(1<=K<=16)个硬币,每一个硬币的面值均在1~1,00,000,000之间。FJ有一个包含N(1<=N<=100,000)种待购物品的序列清单,其中第i种物品需要的钱数为c(i),(1<= c(i) <=10,000),在购物的过程中,物品必须按照清单顺序购买,他随时可以停下来用一枚硬币付一次钱,每次付钱的对象为从上次付钱之后至当前所有物品价值和(当然,他所付的硬币面值也必须足够大),不巧的是,市场上的商户们都没有零钱了,因此如果FJ给的硬币面值大于所购物品价值,他也不会得到找零!

请计算FJ完成N件物品的购物后,所能剩下的最大钱数。如果他无法买到所有物品,输出-1。

输入:

第1行:两个整数K,N;

第2~K+1行:每行为一个硬币面值;

第K+2~N+K+1行:这N行为FJ所要购买的N件物品的价值。

输出:

一行,即结束购物后FJ所剩余的最大钱数,输出-1表示他无法完成购物。

算法标签:状压dp

思路:

看到硬币种类只有16个大概能想到状态压缩,尽管如此之后的dp还是挺妙的,每次对当前剩余的钱硬币,选择则一枚用来看至多能买到哪,好像将不清楚,看看代码能懂。

(一开始没看到一次只能用一个硬币买,哭了)

以下代码:

 

#include<bits/stdc++.h>
#define N 100005
#define M 66000
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
int k,n,sum[N],c[17],b[17],f[M];
int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch-48;_()x=x*10+ch-48;return f*x;}
int main()
{
    k=read();n=read();
    for(int i=1;i<=k;i++)c[i]=read();
    for(int i=1;i<=n;i++)sum[i]=sum[i-1]+read();
    b[1]=1;for(int i=2;i<=k;i++)b[i]=b[i-1]<<1;
    int maxn=(1<<k)-1;
    for(int i=0;i<=maxn;i++)
        for(int j=1;j<=k;j++)
            if(i&b[j]){
                int tmp=f[i^b[j]];
                tmp=upper_bound(sum+1,sum+n+1,sum[tmp]+c[j])-sum;
                f[i]=max(tmp-1,f[i]);
            }
    int ans=-1;
    for(int i=0;i<=maxn;i++)
        if(f[i]==n){
            int tmp=0;
            for(int j=1;j<=k;j++)if(!(b[j]&i))tmp+=c[j];
            ans=max(ans,tmp);
        }
    printf("%d\n",ans);
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/Jessie-/p/9838975.html

相关文章:

  • 【NOIP2017D2T3】列队
  • Algs4-1.3.13判断正确的出队次序
  • Dubbo分析之Exchange层
  • QML-qmake大法
  • DreamWeaver使用小结
  • Js jquery常用的身份证号码 邮箱电话等验证
  • POI 2018.10.27
  • w3c xml
  • Jmeter----逻辑控制器(Logic Controller)
  • Selenium实战教程系列(二)---元素定位
  • Spark内置框架rpc通讯机制及RpcEnv基础设施-Spark商业环境实战
  • ZooKeeper应用——解决分布式系统单点故障
  • 扩展rocketMQ延迟等级
  • echarts花样作死的坑
  • 那些年让你迷惑的阻塞、非阻塞、异步、同步
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 0基础学习移动端适配
  • css系列之关于字体的事
  • Electron入门介绍
  • exports和module.exports
  • javascript从右向左截取指定位数字符的3种方法
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • vagrant 添加本地 box 安装 laravel homestead
  • 构造函数(constructor)与原型链(prototype)关系
  • 回顾2016
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 使用 Docker 部署 Spring Boot项目
  • 王永庆:技术创新改变教育未来
  • 想写好前端,先练好内功
  • 小程序 setData 学问多
  • 学习使用ExpressJS 4.0中的新Router
  • 一个项目push到多个远程Git仓库
  • 自制字幕遮挡器
  • ![CDATA[ ]] 是什么东东
  • (11)MATLAB PCA+SVM 人脸识别
  • (2022 CVPR) Unbiased Teacher v2
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (python)数据结构---字典
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (论文阅读40-45)图像描述1
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net访问oracle数据库性能问题
  • .NET是什么
  • @angular/cli项目构建--http(2)
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @基于大模型的旅游路线推荐方案
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [20161101]rman备份与数据文件变化7.txt
  • [20161214]如何确定dbid.txt
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C++]C++类基本语法