BZOJ 4265 货币系统
今天比赛的时候做到的。题解写得很简单,但是感觉对于我这种蒟蒻还是很有思考的价值的。
题面(由于题面很短,就不概括了):小Q当上了新的宇宙大总统,他现在准备重新设计一套货币系统。
这道题(权限题),拿到的时候给人一种隐约的背包感。数据范围让小蒟蒻我想到DP+矩阵乘法/二分。然而这些都只是YY,我们仔细分析一下题面,可以先将其简(fu za)化为以下这个问题(ki∈{2,3,4,5},ai∈N*):
n=1*(a1+k1*(a2+k2*(a3+k3*(a4+k4*a5)))) 求出min(a1+a2+a3+a4+a5) (为了方便叙述,取m=5讨论)
这个还是比较好理解的。5个面值分别为1,k1,k1*k2,k1*k2*k3,k1*k2*k3*k4,5个面值各取a1,a2,a3,a4,a5张,把这个式子拆开就可以证明其正确性。然后我们可以得到,a2=(m-a1)/k2,后面的a3,a4,a5也是同理。
然后到这里小蒟蒻卡了一下。
反着考虑。假设我们已经得到所有货币的面值,肯定是从大到小贪心地取。因为 货币i 的一张等同于ki-1张 货币i-1 ,所以ai-1<ki-1 。因此,我们可以枚举ki,然后倒过来将n· 对ki的余数(也就是ai)计入答案,再将n·除以ki得到下一个n· ,直到除的次数(即k)用完。
因此,我们可以得到下面这个会T的算法(也就是小蒟蒻考试的时候上交的算法):
#define ll long long
ll n;
int k;
ll dfs(ll xz,int cs){//xz表示当前值,cs表示还剩多少次
if(xz==)return ;
if(cs==)return xz;
ll mi=1e18,ans;
for(ll i=;i<=;i++){
ans=dfs(xz/i,cs-)+xz%i;
if(ans<mi)mi=ans;
}
return mi;
}
int main(){
scanf("%lld%d",&n,&k);
printf("%lld",dfs(n,k));
}
然后我就T了……
T了……
事实上,只要用map记忆化就可以了……怎么说呢……被自己蠢到了……
AC代码如下:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n;
int k;
map<ll,ll>m[];
ll dfs(ll xz,int cs){
if(m[cs].count(xz))return m[cs][xz];
if(xz==)return ;
if(cs==)return xz;
ll mi=1e18,ans;
for(ll i=;i<=;i++){
ans=dfs(xz/i,cs-)+xz%i;
if(ans<mi)mi=ans;
}
return m[cs][xz]=mi;
}
int main(){
scanf("%lld%d",&n,&k);
printf("%lld",dfs(n,k));
}
以此篇博客为戒,多存套路,少犯智障错误。
BZOJ 4265 货币系统的更多相关文章
- 洛谷P1474 货币系统 Money Systems
P1474 货币系统 Money Systems 250通过 553提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 母牛们不但创 ...
- 【USACO 2.3.4】货币系统
[描述] 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
- NOIP2018Day1T2 货币系统
题目描述 在网友的国度中共有 \(n\) 种不同面额的货币,第 \(i\) 种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 \(n\).面额数组为 \( ...
- 洛谷 P5020 货币系统
题目描述 在网友的国度中共有$ n $种不同面额的货币,第 i种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为\(n\).面额数组为 \(a[1..n]\ ...
- luogu5020 [NOIp2018]货币系统 (完全背包)
我那个新的货币系统,就是把原来的货币系统中能被其他数表示的数删掉 那我就算有多少数能被别的数表示,那肯定是要被比它小的表示 于是排个序做完全背包就好了 但是我太zz不会完全背包,然后写了个bitset ...
- [NOIp2018提高组]货币系统
[NOIp2018提高组]货币系统 题目大意: 有\(n(n\le100)\)种不同的货币,每种货币的面额为\([1,25000]\)之间的一个整数.若两种货币系统能够组合出来的数是相同的的,那我们就 ...
- P1474 货币系统 Money Systems(完全背包)(大水题)
题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
- 洛谷 P1474 货币系统 Money Systems(经典)【完全背包】+【恰好装满的最大方案数量】
题目链接:https://www.luogu.org/problemnew/show/P1474 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对 ...
- P1474 货币系统 Money Systems
题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
随机推荐
- canal-client无法获取数据
在虚拟机单cpu环境下 canal.properties配置中 #canal.instance.parser.parallelThreadSize = 16 那么,MysqlMultiStageCop ...
- Binary Search 二分法方法总结
Binary Search 二分法方法总结 code教你做人:二分法核心思想是把一个大的问题拆成若干个小问题,最重要的是去掉一半或者选择一半. 二分法模板: public int BinarySear ...
- 14. Longest Common Prefix ★
题目内容:Write a function to find the longest common prefix string amongst an array of strings 题目分析:本题目利 ...
- 如何下载最新Xshell版本、免费官方正版软件的技巧过程
我们在操作和管理Linux VPS.服务器的时候,肯定需要使用SSH工具,对于这个工具网上有很多免费和付费版本.对于我们用户来说肯定会较多的选择免费软件.其中使用较多的还是Xshell工具,也是我认为 ...
- ng-model-options 时延
ng-model-options="{updateOn: 'blur'}" 失去焦点时生效 ng-model-options="{debounce:500}" ...
- DevExpress ASP.NET Core Controls 2019发展蓝图(No.4)
本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...
- C++ Coroutine简明教程
在C++里,一个函数如果其函数体实现中包含co_await.co_yield.co_return中任何一个关键字,那么这个函数就是一个coroutine.其中: co_await:挂起当前的corou ...
- python学习笔记:1.初识python
4.26 今日内容大纲 1.初识计算机.CPU 内存 硬盘 2.python初识 3.python发展史以及影响 4.python的分类 5.python的种类 6.变量 7.常量 8.注释 9.基础 ...
- (2018 Multi-University Training Contest 2)Problem G - Naive Operations
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6315 题目大意:告诉你a,b两个数组,a数组初始化为0,b数组告诉你长度和具体值,接下来有q次操作,a ...
- windows中obs源码编译的坑
好用的版本: cmake-3.6.1-win64-x64 + vs2015 + qt-opensource-windows-x86-msvc2015_64-5.7.0 + obs-stu ...