Time Limit: 3 second

Memory Limit: 256 MB

【问题描述】

有这么一个游戏: 写出一个1~N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置。下面是一个例子:

3 1 2 4

4 3 6

7 9

16

最后得到16这样一个数字。

现在想要倒着玩这样一个游戏,如果知道N,知道最后得到的数字的大小sum,请你求出最初序列a[i],为1~N的一个排列。若答案有多种可能,则输出字典序最小的那一个。

【数据规模】

对于40%的数据,n≤7;

对于80%的数据,n≤10;

对于100%的数据,n≤12,sum≤12345,且保证一定有解。

【输入格式】

输入文件bds.in的第1行为两个正整数n,sum。

【输出格式】

输出文件bds.out包括1行,对于每个询问输出答案。

【输入样例1】

4 16

【输出样例1】

3 1 2 4

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t030

【题解】



可以画一画样例



注意观察一下最后的答案;

发现其实最后答案=3*1+3*2+1*3+1*4

可以看到第一行的各项的系数是分别是C[3][0],C[3][1],C[3][2],C[3][3];

发现规律!

最后的答案就为

设第一行的第i列元素为a[i]

则最后一行的那一个元素为∑a[i]*C[n-1][i-1]

则我们先预处理出组合数(C[i][j] = C[i-1][j-1]+C[i-1][j])

然后枚举第一行的各个元素分别是什么;

然后O(1)得到最后一行的那唯一一个元素;

看看是不是所要求的sum;

因为这个∑符号里面的各项都是正数,所以可以写一个剪枝;

如果前i项的∑a[i]*C[n-1][i]>sum,则直接剪掉;就不用再等到i=n的时候再判断了;

sum比较小;这个剪枝还是很强力的;



【完整代码】

#include <cstdio>
#include <cstdlib>
#define rei(x) scanf("%d",&x)
#define rep1(i,x,y) for (int i = x;i <= y;i++)
const int MAXN = 15; int n,sum,a[MAXN];
int c[MAXN][MAXN];
bool bo[MAXN]; void dfs(int x,int now)
{
if (now > sum)
return;
if (x>n)
{
if (now==sum)
{
rep1(i,1,n)
{
printf("%d",a[i]);
if (i==n)
puts("");
else
putchar(' ');
}
exit(0);
}
return;
}
rep1(i,1,n)
if (!bo[i])
{
bo[i] = true;
a[x] = i;
dfs(x+1,now+c[n-1][x-1]*a[x]);
bo[i] = false;
}
} int main()
{
rep1(i,1,13)
c[i][i] = c[i][0] = 1;
rep1(i,1,13)
rep1(j,1,i-1)
c[i][j] = c[i-1][j-1]+c[i-1][j];
rei(n);rei(sum);
if (n==1)
puts("1");
else
dfs(1,0);
return 0;
}

【t030】数字构造的更多相关文章

  1. 【t005】数字构造问题

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 给定一个只包含数字[0..9]的字符串,请使用字符串中的某些字符,构建一个能够整除15最大的整数.注意, ...

  2. 浅谈无字母数字构造webshell

    0x00 问题 <?php include 'flag.php'; if(isset($_GET['code'])){ $code = $_GET['code']; if(strlen($cod ...

  3. TTTTTTTTTTTTTT CF 95 B 构造4,7幸运数字 贪心 构造 string

    B. Lucky Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. 涨姿势:抛弃字母、数字和下划线写SHELL

    PHP中异或 (^) 的概念 <?php echo"A"^"?";?> <?php echo"A"^"?&quo ...

  5. java面试题总汇

    coreJava部分 7 1.面向对象的特征有哪些方面? 7 2.作用域public,private,protected,以及不写时的区别? 7 3.String 是最基本的数据类型吗? 7 4.fl ...

  6. BZOJ 4724: [POI2017]Podzielno

    Description 由\([0,B-1]\)的数字构造一个 \(B\) 进制数字,使得他是 \(B-1\) 的倍数. Sol 贪心+二分. 首先 \(X\) 是 \(B-1\) 的倍数,那么有 \ ...

  7. boost学习笔记(七)---date_time库

    date_time库的日期基于格里高利历,支持从1400-01-01到9999-12-31之间的日期计算 #define BOOST_DATE_TIME_SOURCE #include <boo ...

  8. Winform开发框架之统计图表的实现

    在前面的一些随笔中,介绍了不少我的Winform框架的特性,上篇随笔<Winform开发框架之通用高级查询模块>对其中的通用高级模块进了一个整理说明,本篇继续介绍Winform开发框架重要 ...

  9. [转载]Winform开发框架之统计图表的实现

    在前面的一些随笔中,介绍了不少我的Winform框架的特性,上篇随笔<Winform开发框架之通用高级查询模块>对其中的通用高级模块进了一个整理说明,本篇继续介绍Winform开发框架重要 ...

随机推荐

  1. Redmine安装

    http://www.itnpc.com/news/web/146433249372595.html http://www.cnblogs.com/iluzhiyong/p/redmine.html ...

  2. 常见c#正则表达式类学习整理

    1.MatchCollection类 用于输入字符串所找到的成功匹配的集合,Regex.Matches 方法返回 MatchCollection 对象 用法 //str:要搜索匹配项的字符串 patt ...

  3. HTML基础第十讲---排版卷标

    转自:https://i.cnblogs.com/posts?categoryid=1121494 网页的排版部份也是很重要的一环,有些现成的卷标就可以让您轻易的完成缩排或是一些特殊格式的编排喔! [ ...

  4. jmeter连接mysql数据库配置

    用jmeter连接mysql数据库,在配置的过程中遇到了几个坑,跟大家分享一下,避免人人踩坑~~ 关于驱动包:大部分时候是需要下载与服务器的mysql相同版本的jar包~~ 关于驱动包路径:不是所有的 ...

  5. Docker---(7)Docker安装启动RabbitMQ

    原文:Docker---(7)Docker安装启动RabbitMQ 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn.net/ ...

  6. c++ 常识

    1)  功能:格式化字符串输出    说明:format指定输出格式,后面跟要输出的变量        目前printf支持以下格式:          %c        单个字符          ...

  7. (三)unity4.6Ugui中文教程文档-------概要-UGUI Basic Layout

     大家好,我是孙广东.   转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unit ...

  8. 使用Intent的Flag设置启动參数

    Intent中关于激活Activity的Flag Intent类定义了一批常量,用于配置激活Activity时的相关參数; 在Intent中设置Flag ·调用Intent的setFlags()或ad ...

  9. ds1302模块的一个arduino程序

    /* * 读写DS1302 时钟芯片 * @author Yangtf * 很棒的文档 http://www.21ic.com/jichuzhishi/datasheet/DS1302/data/18 ...

  10. .netcore下的微服务、容器、运维、自动化发布

    原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...