Sunnypig闯三角关
背景
贪玩的sunnypig请Charles为他打造一个奇幻世界,Charles欣然答应了。然而一向善于出难题的Charles是决不会轻易让sunnypig轻松拥有一个奇幻世界的,于是Charles在建造过程中设置了重重机关,只有在sunnypig破解了这些障碍之后,才能尝试到奇幻世界中最有玩头的终极宝贝——时空穿梭机。虽然奇幻世界中其他的宝贝也很有趣,但贪玩的sunnypig怎能放过打boss的机会呢?于是他开始了破解障碍的旅程。
描述
第二道障碍来源于一种古老的数学发现——杨辉三角,不过应该是倒过来的杨辉三角。若给出1~n的一个排列A,则将A1、A2相加,A2、A3相加……An-1、An相加,则得到一组n-1个元素的数列B;再将B1、B2相加,B2、B3相加,Bn-2、Bn-1相加,则得到一组n-2个元素的数列……如此往复,最终会得出一个数T。而Charles给sunnypig出的难题便是,给出n和T,再尽可能短的时间内,找到能通过上述操作得到T且字典序最小的1~n的排列。经过汉诺塔问题的训练,sunnypig开始沉着的思考。。。
格式
输入格式
本题有多组数据,对于每组数据:
一行两个整数n(0<n<=20),t即最后求出来的数。
用文件结尾符判断输入结束。
输出格式
对于每组测试数据输出一行n个整数,用空格分开,行尾无多余空格,表示求出来的满足要求的1~n的一个排列。
样例1
样例输入1
4 16
3 9
样例输出1
3 1 2 4
1 3 2
限制
各个测试点2s
不同测试点分数可能不同
建立一个数组b[i][j][k],表示杨辉三角第i行从第j个数第k小的数,比如第4行,1 3 3 1,则b[4][1][1]=1,b[4][1][2]=1;b[4][1][3]=3;b[4][2][1]=1;b[4][2][2]=3;b[4][2][3]=3
搜索剪枝:每次搜索时判断剩余的数和剩余的杨辉数相乘的最小值和最大值,如果最小值加上当前和>T则剪枝,如果最大值加上当前和<T则剪枝
数据太弱了,可以找到大量的算不出来的数据比如 n=20 T=5904462 6143311
#include<iostream>
#include<string>
using namespace std; int n,t,a[][]={},b[][][];
struct{int x,y;}order[][],tr;
bool over=; void search(int x,int sum,int ans[],bool vis[]){
if(over) return ;
if(x>n)
{
for(int i=;i<n;++i) cout<<ans[i]<<" ";
cout<<ans[n]<<endl;
over=;
return ;
} int min=,max=,d=;
for(int i=;i<=n;++i)
if(vis[i]==)
{max+=i*b[n][x][d];min+=i*b[n][x][n-x-d+];d++;}
if(sum+min>t||sum+max<t) return ;
for(int i=;i<=n;++i)
if(vis[i]==)
{
vis[i]=;
ans[x]=i;
search(x+,sum+a[n][x]*i,ans,vis);
vis[i]=;
} } int main()
{
for(int i=;i<=;++i)
for(int j=;j<=i;++j)
{
if(j==||j==i) a[i][j]=;
else a[i][j]=a[i-][j-]+a[i-][j];
order[i][j].x=a[i][j];
order[i][j].y=j;
} for(int i=;i<=;++i)
for(int j=;j<=i;++j)
for(int k=j+;k<=i;++k)
if(order[i][j].x>order[i][k].x)
{tr=order[i][j];order[i][j]=order[i][k];order[i][k]=tr;}
else if(order[i][j].x==order[i][k].x&&(order[i][j].y>order[i][k].y))
{tr=order[i][j];order[i][j]=order[i][k];order[i][k]=tr;} for(int i=;i<=;++i)
for(int j=;j<=i;++j)
for(int k=;k<=i-j+;++k)
{
int z;int tot=;
for(z=;z<=i&&tot<k;++z)
if(order[i][z].y>=j) tot++;
b[i][j][k]=order[i][z-].x;
} while(cin>>n>>t)
{
over=;
int ans[]={};
bool vis[]={};
search(,,ans,vis); }
// system("pause");
}
Sunnypig闯三角关的更多相关文章
- vijos 1085 Sunnypig闯三角关
{这个题5个正确,五个超时,不要盲目相信我的代码,谁有更好的算法或者优化请留言,(*^__^*) 嘻嘻……} 背景 贪玩的sunnypig请Charles为他打造一个奇幻世界,Charles欣然答应了 ...
- Android 实战美女拼图游戏 你能坚持到第几关
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40595385,本文出自:[张鸿洋的博客] 1.概述 继2048之后,今天给大家带 ...
- 【.net深呼吸】WPF异步加载大批量图像
如何在WPF中加载大批量数据,并且不会阻塞UI线程,尤其是加载大量图片时,这活儿一直是很多朋友都相当关注的.世上没有最完美的解决之道,咱们但求相对较优的方案. 经过一些试验和对比,老周找到了一种算是不 ...
- Spring使用ThreadLocal技术来处理这些问题
过去我习惯于从左到右的思考,因为这符合书写的习惯,对于“好”得前端工程师,我们首先可能会去思考什么是好,好的定义和范围,标准和要求?但现在我习惯于从右到左的思考,因为我觉得越是抽象越难以定义,从粒度更 ...
- H5版俄罗斯方块(5)---需求演进和产品迭代
前言: 产品的形态是不断迭代的, 从粗糙到精致, 从简易到立体. 有了最初的技术积累和时间思考后, 终于明确了该游戏的方向. 我想说的是: 技术不是重点, 产品/用户体验才是核心议题. 结合朋友的游戏 ...
- 【BZOJ】【1006】【HNOI2008】神奇的国度
弦图最小染色/MCS算法 Orz PoPoQQQ (UPD:ydc的写法好像更熟悉一些……(类似堆优化的Dij啊~ 先留个坑……明天再看一看……感觉好神奇>_<(完美消除序列之于弦图 就 ...
- 设计模式之——Memento模式
Memento模式即快照模式,就是在某一时刻,设定一个状态,在后面随时可以返回到当前状态的模式. 我们拿一个闯关游戏作为举例,一共有十关,每闯一关,玩家所持金额增加一百,而闯关失败就扣一百.初始时,给 ...
- 2017-2018-1 Java小组-1623 第二周作业
2017-2018-1 Java小组-1623 第二周作业 关于游戏软件的问题 讨论结果 20162301张师瑜 20162305李昱兴 20162306陈是奇 20162308马平川 2016231 ...
- GameBuilder见缝插针游戏开发系列(AA)
今天推出了一款游戏叫<AA>.在最近IOS只是弹出一个游戏.非常心脏的孩子,但有很多乐趣.今天,我们谈论它tangide(GameBuilderV2.0)用控件UICanvas实现它. 在 ...
随机推荐
- mybatis多个参数查询问题
一.话不多数,错误如下 Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException ...
- hbuilder中的 http://www.w3.org/TR/html4/loose.dtd
<!-- This is the HTML 4.01 Transitional DTD, which includes presentation attributes and elements ...
- C# 接口命名规范
接口命名规范:1.大写约定PascalCasing:帕斯卡命名法,每个单词首字母大写应用场景:命名空间.类型.接口.方法.属性.事件.字段.枚举.枚举值eg:HtmlTag IOStream注意:两个 ...
- Js打开QQ聊天对话窗口
function openQQ() { var qq = $(this).attr('data-qq');//获取qq号 window.open('http://wpa.qq.com/msgrd?v= ...
- linux对比两个文件的差异
在项目维护阶段,经常会对垃圾文件进行清理.比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了:废话不多说直接上代码: 1.首先准备好从数据表导出来的数据,方法随意 2.在服务 ...
- [ CQOI 2009 ] 中位数图
\(\\\) \(Description\) 给出\(N\)的一个全排列,统计该排列有多少个长度为奇数的连续子序列,中位数是\(B\). \(N\in [0,10^5]\),\(B\in [0,N]\ ...
- Burn Down Chart(2018.6.4~2018.6.10)
Burn Down Chart (2018.6.4~2018.6.10) 娄雨禛[前端部分] 曾子轩[后端部分+燃尽图] 前端 1. 娄雨禛+李鑫 1)在总工程中完成跳转,实现图片显示,并发布到Git ...
- ASP.NET MVC 二维码生成(ThoughtWorks.QRCode)
原文地址http://www.cnblogs.com/jys509/p/4592539.html
- antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
2017年4月28日,核酸研究(Nucleic Acids Research)杂志上,在线公布了一个可搜索微生物次生代谢物合成基因组簇的综合性数据库antiSMASH数据库 4.0版,前3版年均引用2 ...
- iDRAC RAC0218 最大会话限制
用ssh工具登陆IDRAC远程管理ip地址: /admin1-> racadm racreset RAC reset operation initated successfully. It m ...