简单游戏

题目大意

原本有n个数字,第1,2个相加,第2,3个相加……第n-1,n个相加,由此得出一个长度为n-1的新序列,然后不停重复,最后得出一个t,现在给出一开始的n和t求符合的序列(字典序最小)(多组数据,0 0结束)

样例输入

4 16

3 9

0 0

样例输出

3 1 2 4

1 3 2

对样例解释:

开始排列: 3 1 2 4

第一次操作:3+1=4 1+2=3 2+4=6

得到: 4 3 6

第二次得到: 7 9

最后就是: 16

数据范围限制

数据保证有解。请注意加粗字体!

对于30%的数据,保证该组里的每个N都不超过10。

对于100%的数据,保证有每个N不超过20,且每组数据的个数不超过10。

解题思路

我们可以由题意得出下图,图中代表的是数字相加的次数,可以看出,这是一个杨辉三角,我们可以先求出杨辉三角,再dfs枚举每一个数

三个优化(必打):

1:判断当前总值是否大于t,若大于,退出

2:因为杨辉三角有对称的特性,所以判断a[i]是否大于a[n-i+1],若不大于,退出

3:将剩下的数和杨辉三角剩下可乘的的数排列,将最大的乘最大的,最小的成最小的,得出剩下的数最大的结果,若当前总值+最大的结果<t 那么绝对不可能有结果,就退出,然后将最大的乘最小的,最小的乘最大的,得出最小的结果,若当前总值+最小的结果>t 那么绝对不可能有结果,就退出

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int c[25],yh[25][25],p[25],s[25],h[25],n,t,dg;
void dfs(int x,int y)
{if (x>n&&y==t)//判断是否达到结果{dg=1;//找到结果return;}if (x>n) return;//判断是否越界if (y>=t) return;//判断是否大于tint w=0,big=0,small=0;for (register int i=1;i<=n;i++)//没选过的数if (!p[i]){s[++w]=i;//记录h[w]=yh[n][x+w-1];//和他相配对的}sort(h+1,h+1+w);//排for (register int i=1,j=w;i<=w;i++,j--){small+=s[i]*h[j];//最小的big+=s[i]*h[i];//最大的}if (y+big<t) return;//剪枝if (y+small>t) return;for (register int i=1;i<=n;i++)if (!p[i]){if (x>n/2&&i<=c[n-x+1]) continue;//判断是否大于相对称的地方c[x]=i;//记录p[i]=1;//记录dfs(x+1,i*yh[n][x]+y);//dfsp[i]=0;if (dg) return;c[x]=0;}
}
int main()
{yh[1][1]=1;for (register int i=2;i<=20;i++)for (register int j=1;j<=i;j++)yh[i][j]=yh[i-1][j-1]+yh[i-1][j];//杨辉三角scanf("%d %d",&n,&t);while(n||t){dg=0;memset(c,0,sizeof(c));//清除dfs(1,0);for (int i=1;i<=n;i++)printf("%d ",c[i]);printf("\n");scanf("%d %d",&n,&t);}return 0;
}

【dfs】简单游戏(jzoj 2121)相关推荐

  1. 纪中20日c组模拟赛T1 2121. 简单游戏

    T1 2121. 简单游戏 (File IO): input:easy.in output:easy.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto Pro ...

  2. 碰撞检测碰撞Java简单游戏开发之碰撞检测

    最近研究碰撞检测碰撞,稍微总结一下,以后继续补充: 前言 未几之前在论坛上有人发贴,使用java编写的超级马里奥如何实现碰撞检测,笔者自己以前 也做过Tank大战.里面一样涉及到碰撞检测,翻翻U盘里的 ...

  3. C++小白如何做简单游戏

    相信大家一定有很多小白,那么你们一定为怎么做游戏困扰吧,今天,我就教大家怎样简单地实现移动吧! 首先,我们的代码里没有像类这样看起来很高级的东东,而且,我们的头文件一定要有iostream和cstdi ...

  4. fcn从头开始_从头开始:简单游戏系列1-抓鱼

    fcn从头开始 Recently, I've decided to take a break from coding on IDE's and go back to the basics of exp ...

  5. 使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面

    [Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:http://blog.csdn.net/honghaier 红孩儿Cocos2d-X学习园地QQ3群:205100149,47 ...

  6. c#调用windows api C#简单游戏外挂制作(以Warcraft Ⅲ为例)

    C#简单游戏外挂制作(以Warcraft Ⅲ为例) 网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没 ...

  7. python简单游戏-反弹球

    python简单游戏-反弹球 tkinter实现,直接贴上代码 from tkinter import* import time import randomclass Ball:def __init_ ...

  8. HTML5期末大作业:仿阴阳师游戏网站设计——仿阴阳师游戏官网首页(1页) 学生动手游页设计模板下载 网游大学生HTML网页制作作品 简单游戏网页设计成品 dreamweaver学生网站模板

    HTML5期末大作业:仿阴阳师游戏网站设计--仿阴阳师游戏官网首页(1页) 学生动手游页设计模板下载 网游大学生HTML网页制作作品 简单游戏网页设计成品 dreamweaver学生网站模板 常见网页 ...

  9. div+css静态网页设计游戏网站设计——仿阴阳师游戏官网首页(1页) 学生动手游页设计模板下载 网游大学生HTML网页制作作品 简单游戏网页设计成品 dreamweaver学生网站模板

    HTML5期末大作业:仿阴阳师游戏网站设计--仿阴阳师游戏官网首页(1页) 学生动手游页设计模板下载 网游大学生HTML网页制作作品 简单游戏网页设计成品 dreamweaver学生网站模板 常见网页 ...

最新文章

  1. python归档excel数据_python怎么把数据保存为excel
  2. 销售自己使用过的小汽车纳多少增值税
  3. Lync Server外部访问系列PART6:启用外部访问
  4. Tensorflow报错:AttributeError: 'module' object has no attribute 'scalar_summary'
  5. 点焊机器人焊接超时_「技术帖」FSW点焊技术在车身铝薄板焊接中的应用
  6. 瑞昱rtl8197fs芯片怎么样_拆开外表看内在 篇二:设计精美,做工优秀却无自研芯片——荣耀路由器2拆解评测...
  7. 手机远程桌面linux系统,vnc远程桌面手机版,vnc远程桌面手机版软件好用推荐
  8. LMDB:轻量级内存映射数据库-----入门使用1
  9. 基于STM32F103的智能循迹小车(舵机加双电机加灰度传感器的方案)
  10. Wifi的密码长度有何限制
  11. python识别视频中火焰_基于yolov3和python框架的火焰识别检测算法
  12. 超详细的html+css基础知识树状图~HTML标签
  13. Zeppelin Job monitor打开
  14. 如何挑选自己喜欢的colormap样式
  15. Datawhale公众号运营周
  16. (兔C残篇)关于python 列表的介绍
  17. 计算机毕业设计(附源码)python信用卡逾期数据处理分析系统
  18. easyAR学习(一)
  19. Xcode下载模拟器太慢?
  20. hive mysql 权限,hive权限问题,

热门文章

  1. python echo函数_python如何调用php文件中的函数详解
  2. 华为交换机初始化_华为交换机恢复出厂设置
  3. 乐视android版本点四下,EUI5.9+Android7.0刷机包
  4. 2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程
  5. 算法题目——二次函数三分求极值(HDU-3714)
  6. 7-23 还原二叉树 (25 分)(分析加详解)
  7. [剑指offer]面试题19:二叉树的镜像
  8. strcmp()字符串比较函数
  9. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)
  10. 蓝桥杯 数字三角形 贪心+动态规划