题目描述

有这么一个游戏:

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

3 1 2 4

4 3 6

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

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

[color=red]管理员注:本题描述有误,这里字典序指的是1,2,3,4,5,6,7,8,9,10,11,12

而不是1,10,11,12,2,3,4,5,6,7,8,9[/color]

输入输出格式

输入格式:

两个正整数n,sum。

输出格式:

输出包括1行,为字典序最小的那个答案。

当无解的时候,请什么也不输出。(好奇葩啊)

输入输出样例

输入样例#1:

4 16

输出样例#1:

3 1 2 4

说明

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

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

对于100%的数据,n≤12,sum≤12345。

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define ll long long
 6 using namespace std;
 7 int xvlie[1005],used[1005],yanghui[55][55];
 8 int des,n,note=0;
 9 ll sum=0;
10 void make_yanghui(){
11     for(int i=1;i<=13;i++){
12         yanghui[i][1]=yanghui[i][i]=1;
13     }
14     for(int i=2;i<=13;i++){
15         for(int j=2;j<i;j++){
16             yanghui[i][j]=yanghui[i-1][j]+yanghui[i-1][j-1];
17         }
18     }
19
20 }
21
22 void search(int k){
23     if(note==1) return;
24     if(sum>des) return;
25     if(k==n+1&&sum==des) {
26         note=1;
27         for(int i=1;i<=n;i++){
28             printf("%d ",xvlie[i]);
29         }
30         puts("");
31         return ;
32     }
33
34     for(int i=1;i<=n;i++){
35         if(used[i]==1) continue;
36
37         used[i]=1;
38         xvlie[k]=i;
39
40         sum+=yanghui[n][k]*i;
41
42         search(k+1);
43
44         sum-=yanghui[n][k]*i;
45         used[i]=0;
46         xvlie[k]=0;
47     }
48 }
49
50 int main(){
51 //    freopen("01.in","r",stdin);
52     scanf("%d%d",&n,&des);
53     make_yanghui();
54     search(1);
55
56     return 0;
57 }

这种问题肯定有规律,算一下就会发现对应杨辉三角形

虽然n比较小但是也要优化一下24行没加的话会Tle

40行,44行就是边加边算,不用每次都从头再来一次

转载于:https://www.cnblogs.com/radiumlrb/p/5820667.html

洛谷 P1118 数字三角形游戏 Label:dfs相关推荐

  1. 洛谷 P1019 单词接龙 Label:dfs

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  2. 洛谷1216 数字三角形

    题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 ...

  3. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  4. 刷题-洛谷-P1179 数字统计

    P1179 数字统计-C语言 1.题目 2.解题过程 结果: 代码: //洛谷 P1179 数字统计 #include <stdio.h> //#define MIN 1 //#defin ...

  5. 洛谷P1553 数字反转(升级版)

    洛谷P1553 数字反转(升级版) 题目描述 输入格式 输出格式 输入输出样例 说明/提示 个人理解 整数 百分数 分数 小数 AC代码 写在最后 题目描述 给定一个数,请将该数各个位上数字反转得到一 ...

  6. 洛谷 P5725 求三角形

    题目链接: P5725 [深基4.习8]求三角形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5725题目描述: ...

  7. 洛谷 P1019 单词接龙 (DFS)

    题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...

  8. 洛谷—P1307 数字反转

    题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2). 输入输出格式 输入格式: 一个 ...

  9. 题解洛谷1179数字统计 记录问题

    文章目录 数字统计 一.思路1 二.思路二 优化 1.想法 2.代码 二.继续优化 不用类型转换 总结 数字统计 题目描述 请统计某个给定范围[L, R][L,R]的所有整数中,数字 22 出现的次数 ...

最新文章

  1. .asmx支持post请求或者get请求调用(WebService 因 URL 意外地以 结束,请求格式无法识别 的解决方法)...
  2. CSS3绘制圆角矩形的简单示例
  3. 旷视砸20亿进军AIoT,发布国内首个机器人协作大脑河图
  4. text-indent无效解决方案
  5. ALV Checkbox 单行灰显
  6. WEB BUTTON IN DOTNET
  7. php 调用redfish,RedfishWhitePaperRedfish白皮书.pdf
  8. 如何将UTF-8转换为UTF-8n
  9. POST的Response数据问题
  10. 【python教程入门学习】机器学习常用术语
  11. 绘制三角形的外接圆和内接圆
  12. Java 实现计算器功能
  13. 网易云音乐数仓建模实践
  14. linux 前台和后台,Linux前台进程与后台进程的区别
  15. 什么是自然语言处理?NLP简介
  16. 架构师培训入门知识体系树
  17. 笔记本显示器驱动更新
  18. 2020-05-19
  19. Windows 下常用盗版软件的替代免费软件列表
  20. 安超OS为企业数字化转型构建坚实的云基座

热门文章

  1. Ajax Accordion(可折叠) 动态生成菜单
  2. 常用商品条形码简介和成员国前缀码
  3. 重构(Refactoring)概要描述
  4. VMware 多款产品中存在严重漏洞
  5. 卡巴斯基称发现美国中情局CIA 开发的新恶意软件
  6. 谷歌开源文件访问漏洞审计工具 PathAuditor(详解)
  7. 【原/转】UITableview性能优化总结
  8. 动图,用Python追踪NBA球员的运动轨迹
  9. 部署全局ajax处理
  10. redis学习笔记二