题目描述

LYK做了一个梦。

这个梦是这样的,LYK是一个财主,有一个仆人在为LYK打工。

不幸的是,又到了月末,到了给仆人发工资的时间。但这个仆人很奇怪,它可能想要至少x块钱,并且当LYK凑不出恰好x块钱时,它不会找零钱给LYK。

LYK知道这个x一定是1~n之间的正整数。当然抠门的LYK只想付给它的仆人恰好x块钱。但LYK只有若干的金币,每个金币都价值一定数量的钱(注意任意两枚金币所代表的钱一定是不同的,且这个钱的个数一定是正整数)。LYK想带最少的金币,使得对于任意x,都能恰好拼出这么多钱。并且LYK想知道有多少携带金币的方案总数。

具体可以看样例。

输入格式(dream.in)

第一行一个数n,如题意所示。

输出格式(dream.out)

输出两个数,第一个数表示LYK至少携带的金币个数,第二数表示方案总数。

输入样例

6

输出样例

3 2

样例解释

LYK需要至少带3枚金币,有两种方案,分别是{1,2,3},{1,2,4}来恰好得到任意的1~n之间的x。

输入样例2

10

输出样例2

4 8

数据范围

对于30%的数据n<=10。

对于60%的数据n<=100。

对于100%的数据n<=1000。

分析:第一问很好处理,就是看n的二进制位上有多少个是1,第二问可以先考虑搜索,因为个数定了嘛,所以每次搜当前的和是多少,这一位数字从哪一个开始枚举,选了多少个数字,因为每个数字只能选一次,可以边递归边判断,方法和:传送门 差不多.

其实可以发现这就是一道dp嘛,把搜索时的参数变成状态就好了:f[i][j][k]表示前i个数字,和为j,最大的一个数字为k的方案数,递推非常好想,主要是空间问题,滚动数组优化一下就好了.

60分暴力:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, cnt, ans, f[][][]; void init(int x)
{
for (int i = ; i <= x; i *= )
{
cnt++;
x -= i;
}
if (x)
cnt++;
} int dfs(int dep, int sum, int l)
{
int cntt = ;
if (f[dep][sum][l])
return f[dep][sum][l];
if (dep == cnt + )
{
if (sum >= n)
cntt++;
return cntt;
}
for (int i = l; i <= sum + ; i++)
cntt += dfs(dep + , sum + i, i + );
return f[dep][sum][l] = cntt;
} int main()
{
scanf("%d", &n);
init(n);
printf("%d %d\n", cnt,dfs(,,)); return ;
}

正解:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, cnt, f[][][], last, now, ans; void init(int x)
{
for (int i = ; i <= x; i *= )
{
cnt++;
x -= i;
}
if (x)
cnt++;
} int main()
{
scanf("%d", &n);
init(n);
last = , now = ;
f[][][] = ;
for (int i = ; i < cnt; i++)
{
for (int j = ; j <= n; j++)
for (int k = ; k <= n; k++)
if (f[last][j][k])
for (int l = k + ; l <= j + ; l++)
f[now][min(n, j + l)][l] += f[last][j][k];
swap(now, last);
}
for (int i = ; i <= n; i++)
ans += f[last][n][i];
printf("%d %d\n", cnt, ans); return ;
}

noip模拟赛 梦想的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. mybatis时间查询小技巧

     网上大多数使用mybatis查询的时候都是把时间转换成Date使用的,其实这里时可以直接使用String的,比如 <if test="startTime != null and st ...

  2. 制作并发布个人CocoaPods库

    随着对 CocoaPods 越来越多的依赖,我们也可以尝试把自己的库发布到它上面. 1.在Github上新建一个项目(名字我随便取了一个,其他步骤截图为WCUIKit).自己做相应修改即可. 2.克隆 ...

  3. serlvet HttpServletRequest

    1.http://localhost/az/servlet/TestResponse out.print("getServletPath:"+request.getServletP ...

  4. [GDOI2014]拯救莫莉斯

    题目描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市吗,两座城市间相邻 ...

  5. ACM_Uppercase(水题)

    Uppercase Time Limit: 2000/1000ms (Java/Others) Problem Description: 给出一句中间无特殊符号的英语句子,要求将各单词的首字母改大写. ...

  6. 全面学习ORACLE Scheduler特性(7)Scheduler抛出的Events

    四.使用Events Event直译对应的中文解释是指事件,不过单纯讲事件毕竟太抽象了,举个示例来形容吧.A(对应某个应用程序,或者是ORACLE中的进程)在干活时突然眉头一皱说道,不好,前方有情况, ...

  7. 367 Valid Perfect Square 有效的完全平方数

    给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False.注意:不要使用任何内置的库函数,如  sqrt.示例 1:输入: 16输出: True示例 ...

  8. Asp 循环输出 form 表单提交的数据

    亲测asp提交form表单数据,在接收页面循环输出数据 dim var for each var in request.form response.write var&"=" ...

  9. 使用Micrisoft.net设计方案 第三章Web表示模式 Web模式集群详细介绍 Observer(观察器)

    在面向对象的编程中,对象同时包含数据和行为,这两者一起表示业务域的特定方面.使用对象生成应用程序的优点之一是可以将所有数据操作封装在对象内.这样, 就使对象成为独立的单位,并增加了在其他应用程序中重用 ...

  10. 全志tina v3.0系统编译时的时间错误的解决(全志SDK的维护BUG)

    全志tina v3.0系统编译时的时间错误的解决(全志SDK的维护BUG) 2018/6/13 15:52 版本:V1.0 开发板:SC3817R SDK:tina v3.0 1.01原始编译全志r1 ...