题目描述

3   1   2   44   3   67   916

有这么一个游戏:
写出一个1~N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置。
现在想要倒着玩这样一个游戏,如果知道N,知道最后得到的数字的大小sum,请你求出最初序列a[i],为1~N的一个排列。若答案有多种可能,则输出字典序最小的那一个。当无解的时候,请什么也不输出。(好奇葩啊)
数据规模
对于100%的数据,n≤12,sum≤12345
思路
注意到这样一个事实:
N=4时,正序执行的话最后答案应该是a[1]+3*a[2]+3*a[3]+a[4]
N=5时,正序执行的话最后答案应该是a[1]+4*a[2]+6*a[3]+4*a[4]+a[5]
所以不难发现这样一个规律
ANS=∑(a[i]*C(n,i))
这样之后这个题就比较简单了,我们发现数据范围很小,所以DFS加点剪枝应该就没问题了。每次枚举可用的点,然后有一个可行性剪枝:当个数>N时检查并退出循环,还有一个就是当当前结果>sum时直接跳出本轮循环,返回到上一个数。
当然我们还有一种不是很完美的方法,就是用C++STL的next_permutation,枚举全排列并检查,USACO上过7个点,3个TLE,但是本地评测能过,耗时最长点为0.006s,这就比较尴尬了。
接下来上代码吧:
代码:
(我做的原题是考试题(并不是NOIP DAY2 T3的)愤怒的小鸟)

#include<iostream>
using namespace std;
int i,j,m,n;
int a[1001][1001],ans[1001];
int b[1001],kk,s;int r()
{int ans=0,f=1;char ch;while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){ans*=10;ans+=ch-'0';ch=getchar();}return ans*f;
}
void triangle()
{for(i=1;i<=n;i++){a[i][1]=a[i][i]=1;}for(i=2;i<=n;i++)for(j=2;j<=i;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}
}void dfs(int x,int sum)
{if(x==n+1&&sum==s) {kk=1;return;}else if(x==n+1&&sum!=s) return;if(sum>s) return;for(int i=1;i<=n;i++){if(!b[i]){b[i]=1,ans[x]=i;dfs(x+1,sum+i*a[n][x]);if(kk)return;b[i]=0;ans[x]=0;}}
}int main()
{n=r(),s=r();triangle();dfs(1,0);if(!ans[1])return 0;for(i=1;i<=n;i++)cout<<ans[i]<<" ";return 0;
}

[USACO06FEB]数字三角形Backward Digit Su…相关推荐

  1. P1118 [USACO06FEB]数字三角形Backward Digit Su…

    P1118 [USACO06FEB]数字三角形Backward Digit Su- 题目描述 FJ and his cows enjoy playing a mental game. They wri ...

  2. 杨辉三角 [USACO06FEB]数字三角形Backward Digit Su…

    杨辉三角 简单的说一下就是两个未知数和的幂次方运算后的系数问题,比如(x+y)的平方=x的平方+2xy+y的平方,这样系数就是1,2,1这就是杨辉三角的其中一行,立方,四次方,运算的结果看看各项的系数 ...

  3. 洛谷—— P1118 [USACO06FEB]数字三角形Backward Digit Su…

    https://www.luogu.org/problem/show?pid=1118#sub 题目描述 FJ and his cows enjoy playing a mental game. Th ...

  4. 洛谷 P1118 [USACO06FEB]数字三角形Backward Digit Su…

    题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N ...

  5. P1118 [USACO06FEB]数字三角形`Backward Digit Su`…

    题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 11 toN(1 \le N \l ...

  6. P1118 [USACO06FEB]数字三角形`Backward Digit Su`… 回溯法

    有这么一个游戏: 写出一个11至NN的排列a_iai​,然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少11,直到只剩下一个数字位置.下面是一 ...

  7. 洛谷P1118 [USACO06FEB]数字三角形Backward Digit Su…

    题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N ...

  8. 洛谷P1118 [USACO06FEB]数字三角形 Backward Digit Su(dfs剪枝)

    题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 11 toN(1 \le N \l ...

  9. P1118 [USACO06FEB]数字三角形`Backward Digit Su`…(C++_DFS)

    题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 11 toN(1 \le N \l ...

最新文章

  1. 7. PowerShell -- Provider,数据操作和注册表操作
  2. History命令用法
  3. JVM学习笔记(四)------内存调优
  4. Struts2s:select/s:select
  5. Servlet体系及方法
  6. Nginx基本数据结构之ngx_chain_t
  7. java 和mysql 时间_java和mysql之间的时间日期类型传递
  8. Tomcat启动乱码及IDEA中tomcat信息乱码解决方法
  9. 多管齐下,防御拒绝服务攻击
  10. Error in cool_function[1] : object of type ‘closure‘ is not subsettable
  11. 论文阅读:A machine learning approach to medical image classification:Detecting age-related macular dege
  12. 【DeeCamp 优秀项目详解】从零开始到 AI 技术落地,只用三周
  13. YOLOv5、v7改进之三十九:引入改进遮挡检测的Tri-Layer插件 | BMVC 2022
  14. Kylin Linux V10升级gcc操作
  15. Eclipse代码格式化无效解决方案
  16. livp后缀文件图片怎么打开,在电脑怎么打开live照片批量转换?
  17. 用c++设计 公司职工的信息管理程序 求大神!!
  18. 每天进步一点点【稀疏数组】
  19. Oraclle数据库常用语法
  20. addevent()实现跨浏览器绑定事件

热门文章

  1. 基于pywin32的考勤警报软件
  2. Java代码实现单元测试
  3. Sublime Text 3 、WebStorm配置护眼主题(浅绿色)
  4. 读论文,第二天(2):Deep inertial poser: learning to reconstruct human pose from sparse inertial
  5. 诺奖得主涉嫌学术造假!30多篇论文被曝P图、复制粘贴,牵扯中科大教授等多国学者
  6. 2014迅雷校园招聘笔试题
  7. object-orientedprocedure-oriented
  8. 自定义Office中格式刷的快捷键
  9. linux显示编程语言语句,linux – 如何使用Glade / GtkD和D编程语言显示Hello World
  10. 权御天下计算机音乐数字乐谱,天谕手游权御天下乐谱代码是什么-天谕手游权御天下乐谱代码分享_快吧手游...