【u107】数字游戏(bds)
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
有这么一个游戏: 写出一个1~N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置。下面是一个例子:
3 1 2 4
4 3 6
7 9
16
最后得到16这样一个数字。 现在想要倒着玩这样一个游戏,如果知道N,知道最后得到的数字的大小sum,请你求出最初序列a[i],为1~N的一个排列。若答案有多种可能,则输出字典序最小的那一个。
【输入格式】
输入文件bds.in的第1行为两个正整数n,sum。
【输出格式】
输出文件bds.out包括1行,为字典序最小的那个答案。
【数据规模】
对于40%的数据,n≤7; 对于80%的数据,n≤10; 对于100%的数据,n≤12,sum≤12345,且保证一定有解。
Sample Input1
4 16
Sample Output1
3 1 2 4
【题解】
从最下面往上推
a上面的b和c都会被加1次。
再往上则d会因为d+e=b 加1次。
e会因为d+e和e+f加2次。
f会因为e+f加一次。
所以d用了1次,e用了2次,f用了1次。
再往上。
g会因为g+h=d加一次
h会因为g+h加一次,还会因为h+i==e加两次。因为e被加了两次。
同理i因为h+i==e加了两次因为i+j==f加了一次。
j因为i+j==f加了一次。
综上g,h,i,j分别加了1,3,3,1次。
可以看出来是杨辉三角了。
知道了每个序列中的每一个元素最后会加几次。就不用一层一层地算下来了。
以后只要枚举完一个序列。直接用那些1,3,3,1这样的数字作为系数。乘上序列中的相应位置上的数字就可以了。
注意是1-n的全排列。
【代码】
#include <cstdio>
#include <cstring>
#include <stdlib.h> int n,sum;
int yanghui[20][20]= {0},what[20];
bool bo[20]; void input_data()
{
memset(bo,0,sizeof(bo)); //每个数字一开始都没有被用过。
scanf("%d%d",&n,&sum);
yanghui[1][1] = 1;
for (int i = 2;i <= n;i++) //处理出第n层的杨辉三角
for (int j = 1;j <= i;j++)
yanghui[i][j] = yanghui[i-1][j-1]+yanghui[i-1][j];
} void sear_ch(int next,int now) //要找的下一个是next,当前累加的值为now
{
if (now > sum) //如果大于sum了则剪枝
return;
if (next == n+1) //如果找完n个数字则判断是否和sum相同。
{
if (now == sum)
{
for (int i = 1;i <=n-1;i++) //输出答案。
printf("%d ",what[i]);
printf("%d",what[n]);
exit(0);
}
return;
}
for (int i = 1;i <= n;i++) //继续枚举数字放在next的位置
if (!bo[i]) //没有用过
{
bo[i] = true; //记录用过
what[next] = i; //记录用了什么数字
sear_ch(next+1,now+yanghui[n][next]*i); //乘上相应的系数即可。
bo[i] = false;
}
} void get_ans()
{
for (int i = 1;i <= n;i++) i//这是第一个数字。
if (!bo[i])
{
bo[i] = true; //记录i这个数字已经被使用过了。
what[1] = i; //记录这个位置放什么
sear_ch(2,yanghui[n][1]*i);//进入递归。
bo[i] = false;
}
} int main()
{
input_data();
get_ans();
return 0;
}
【u107】数字游戏(bds)的更多相关文章
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- java 猜数字游戏
作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...
- 【原创Android游戏】--猜数字游戏Version 0.1
想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
- NOIP2003pj数字游戏[环形DP]
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- Codevs 1229 数字游戏
1229 数字游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description Lele 最近上课的时候都很无聊,所以他发明了 ...
- codevs 1229 数字游戏(可重集的全排列)
传送门 Description Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间. 这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写某个数字),然后 ...
- XDU 1161 - 科协的数字游戏II
Problem 1161 - 科协的数字游戏II Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 112 ...
随机推荐
- ie6中兼容性问题总结
针对firefox ie6 ie7 ie8的css样式中的line-height属性,以前我们大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7以上对! ...
- Directx11教程(8) 一个新的camera类
原文:Directx11教程(8) 一个新的camera类 本章我们将替换掉CameraClass类,实现一个稍微靠谱点的摄像机类.并通过Q,W,E,A,S,D,Z,X,C等按键实现摄像机的 ...
- 只想着一直调用一直爽, 那API凭证泄漏风险如何破?
如今各家云厂商都通过给用户提供API调用的方式来实现一些自动化编排方面的需求.为了解决调用API过程中的通信加密和身份认证问题,大多数云厂商会使用同一套技术方案—基于非对称密钥算法的鉴权密钥对,这里的 ...
- hdu5289 RMQ+二分
RMQ预处理最大值,最小值,然后对于每一点,二分可能满足的区间长度,长度-1就是该店开始的区间满足的个数. #include<stdio.h> #include<string.h&g ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图 代码工程地址: https://github.com/j ...
- 折腾spring boot 应用
开发环境 安装配置java环境 配置maven环境,修改镜像地址 <mirror> <id>aliyunmaven</id> <mirrorOf>*&l ...
- 【Leetcode链表】两两交换链表中的节点(24)
题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2- ...
- 2019-3-25-win10-uwp-如何将像素数组转-png-文件
title author date CreateTime categories win10 uwp 如何将像素数组转 png 文件 lindexi 2019-3-25 8:53:1 +0800 201 ...
- linux centos 一键安装环境
phpStudy for Linux 支持Apache/Nginx/Tengine/Lighttpd, 支持php5.2/5.3/5.4/5.5切换 已经在centos-6.5,debian-7.4. ...
- LocalDate、LocalDateTime与timestamp、Date的转换
LocalDate.LocalDateTime与timestamp.Date的转换 1.LocalDate转Date LocalDate nowLocalDate = LocalDate.now(); ...