[BZOJ2036]聪明的阿卑多
[BZOJ2036]聪明的阿卑多
试题描述
也许你从没听说过阿卑多,但你一定知道他爷爷的爷爷的爷爷,那就是聪明绝顶的阿凡提先生。是的,阿卑多也是个聪明的小孩。 一天,阿卑多骑着他的小毛驴,在小镇上晃悠,正好遇上了小巴依——那个自以为是的小财主。小巴依正在炫耀他的金币: “你们见过这样的金币么?这可不是一般的金币,你看它们多大多重啊!最主要的是,它们每个上面都刻有我的名字和一个编号,是独一无二的!看看,从我出生开始,每 \(2\) 个月,爸爸便给我 \(1\) 个特做的大金币,并从 \(1\) 开始编号,现在我已经有 \(60\) 枚了,哈哈……” 小巴依见了阿卑多,于是便想考一考他:“阿卑多,听说你是最聪明的。看见我每个金币上的数字了吗?你现在拿取一半的金币,并能用你拿的若干金币上的数的和表示我的任意一枚金币上的数。如果你能办到,那么就奖你一枚金币;如果不能,就给我做三年长工好了。” 阿卑多想了一想,说:“我可以只拿 \(\frac{1}{10}\) 就办到,不过如果我办到了,你就得分一半金币给我。” \(\frac{1}{10}\)?小巴依心想,你准备给我当长工好了。 于是阿卑多开始取金币…… 自然,阿卑多出色的完成了任务,得到了 \(30\) 枚金币,同样的,他把这些金币都分给了穷人们。 给你的任务就不同了。
输入
一个数 \(n(1 \le n \le 1000\) 表示金币枚数(金币上的数分别为 \(1\) 到 \(n\))
输出
两个数,阿卑多最少要拿的金币数以及不同的方案数。
输入示例
6
输出示例
3 2
数据规模及约定
见“输入”
题解
首先第一问显然可以贪心做(受二进制的启发)。
第二问其实也是基于这个思想,我们从小到大依次选数,如果已经选的数之和加 \(1\) 大于等于当前要选的数,就可以选这个数。第一问我们已经解决了,步数肯定不会超过 \(logn\),所以可以将它设进 dp 状态里:\(f(i, s, m)\) 表示已选 \(i\) 个数,当前总和是 \(s\),选出的所有数都严格小于 \(m\) 的方案数,然后就可以 dp 啦(注意 \(s\) 在超过 \(n\) 的时候和 \(n\) 取 \(min\) 就好了)。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
#define rep(i, s, t) for(int i = (s); i <= (t); i++)
#define dwn(i, s, t) for(int i = (s); i >= (t); i--)
int read() {
int x = 0, f = 1; char c = getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
return x * f;
}
#define maxn 1010
#define maxlog 11
int n, step, f[maxlog][maxn][maxn];
int main() {
n = read();
int sum = 0;
rep(i, 1, n) if(sum < i) sum += i, step++;
printf("%d ", step);
f[0][0][1] = 1;
rep(i, 0, step) rep(s, 0, n) rep(mx, 1, n) if(f[i][s][mx]) {
if(mx <= s + 1 && i < step) f[i+1][min(s+mx,n)][mx+1] += f[i][s][mx];
f[i][s][mx+1] += f[i][s][mx];
}
printf("%d\n", f[step][n][n+1]);
return 0;
}
[BZOJ2036]聪明的阿卑多的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ2429[HAOI2006]聪明的猴子[最小生成树 kruskal]
2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 896 Solved: 575[Submit][Statu ...
- vijos1740 聪明的质监员 (二分、区间求和)
http://www.rqnoj.cn/problem/657 https://www.vijos.org/p/1740 P1740聪明的质检员 请登录后递交 标签:NOIP提高组2011[显示标签] ...
- nyoj 171 聪明的kk
聪明的kk 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 聪明的“KK”非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国不断变换和绚丽多彩的 ...
- NOIP2011提高组 聪明的质监员 -SilverN
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[L ...
- 最小生成树 2429: [HAOI2006]聪明的猴子
BZOJ 2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 877 Solved: 566[Submit][ ...
- [原]携程预选赛A题-聪明的猴子-GCD+DP
题目: 聪明的猴子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 【解题报告】[动态规划] CodingTrip - 携程编程大赛 (预赛第一场)- 聪明的猴子
原题: 聪明的猴子 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Problem D ...
- 做一个聪明的.net程序员
最近看了传智播客(http://net.itcast.cn/)的.net培训视频,感受颇深,忍不住要把感受写下来跟网友分享一下. 我从接触.net到现在已经至少过去了三五个年头,用.net也已经做了若 ...
随机推荐
- 2017.12.19 Java包的静态导入import static和import的区别
import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com-..ClassName;而静态导入是这样:import static com-..ClassN ...
- cloudera manager的卸载以及重新安装
1 卸载cloudera 参照 http://www.cnblogs.com/chenfool/p/3738540.html Cloudera 的官方介绍: http://www.cloudera.c ...
- SQLServer事务的原理
1.事务的概念 是数据库管理系统执行过程中的一个逻辑单元,由一个有限的数据库操作序列组成: 由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操 ...
- java基础面试题:请说出作用域public,private,protected,以及不写时的区别
不写任何作用域(即访问权限)表示friendly public 公共,权限最大,作用域最大,在类内部.同一package.子孙类.其他package都可以访问 protected保护,在类内部.同一p ...
- 创建一个 Dynamic Web Project
准备工作 一.修改 JDK Compliance level 二.创建 Dynamic Web Project Ctrl + N 三.配置网站服务器 tomcat 这里切记不要点击 Finish ,一 ...
- C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量
学习了类的继承,今天说一下当父类与子类中有同名函数和变量时那么程序将怎么执行.首先明确当基类和子类有同名函数或者变量时,子类依然从父类继承. 举例说明: 例程说明: 父类和子类有同名的成员 data: ...
- 【Ecshop】将内置的 FCkeditor 更换为 UEditor
1.下载UE,解压到includes/,更名目录名为ueditor 注意更改配置后端文件上传路径,参考文档 2.修改admin/includes/lib_main.php,添加 /** * 生成编辑器 ...
- Python 正则表达式 search vs match
search()和match()函数都是正则表达式中的匹配函数,二者有何区别呢? 1.match()从string的开始位置进行正则匹配,即从0位置开始匹配,若匹配上则返回一个match对象,否则返回 ...
- 如何修改iframe内的页面的元素的样式。。。。
方法一: 直接通过设置backgroundColor的颜色即可:<!DOCTYPE html><html><head><script>function ...
- javaWeb开发中常见的问题
1.修改表单提交的时候不好使可能是因为没写对应隐藏域的ID 2.el表达式在js代码中要加“”,例如 "${}" 3.JavaScript中的函数也有重载的特性.如果两个input ...