洛谷P1118 数字三角形【dfs】【STL】
题目链接:https://www.luogu.org/problemnew/show/P1118
题意:
1~n的一个排列,相邻的两项加起来得到下一行。
现在给定最后一行的数字,问最初的1~n的排列是什么。
思路:
next_permutation大法好。但是要注意剪枝。
首先要发现最后一行这个数系数的规律是一个杨辉三角。
先处理出这个系数。
然后排列。
如果我们在加到前i项的时候发现他已经比结果大了,那么后面不管怎么排列都是没有用的,要跳过。
怎么跳过呢,这里还挺tricky的【要学会!】
用sort对后面几个数从大到小排序就行了,因为本身next_permutation就是按照“字典序”来排的
这里要注意用的是do...while【竟然这年头还真有用do...while的】
因为不然第一个1234....n这个排列没有被考虑到。
#include<stdio.h>
#include<stdlib.h>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue> using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n, sum;
int num[];
int xishu[][]; bool cmp(int a, int b)
{
return a > b;
} int main()
{
// LL res = 1;
// for(int i = 1; i <= 12; i++){
// res *= i;
// }
// printf("%lld\n", res);
scanf("%d%d", &n, &sum);
for(int i = ; i <= n; i++){
num[i] = i;
}
xishu[][] = ;
for(int i = ; i <= n; i++){
for(int j = ; j <= i; j++){
xishu[i][j] = xishu[i - ][j - ] + xishu[i - ][j];
}
} do{
int ans = ;
bool flag = true;
for(int i = ; i <= n; i++){
ans += xishu[n][i] * num[i];
if(ans > sum){
flag = false;
sort(num + i, num + + n, cmp);
break;
}
}
if(ans == sum && flag){
printf("%d", num[]);
for(int i = ; i <= n; i++){
printf(" %d", num[i]);
}
printf("\n");
break;
}
}while(next_permutation(num + , num + + n)); return ;
}
洛谷P1118 数字三角形【dfs】【STL】的更多相关文章
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- 洛谷 P1118 数字三角形游戏 Label:dfs
题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一 ...
- 洛谷 - P1118 - 数字三角形 - next_permutation
https://www.luogu.org/problemnew/show/P1118 next_permutation的第二个参数是最后一个元素的下一个元素,sort也是一样!有毒!这么低级的错误. ...
- 洛谷P1118数字三角形题解
题目 这个题我们乍一看会有些熟悉.觉得是可以用DP来做的那个题.但是打眼一看,就会发现不对了.因为那个题是顺推而这个题则是逆推. 这样的话可怎么办呢. 我们可以在草稿纸上推一下,我们随便写个数n. 再 ...
- 洛谷P1216 数字三角形【dp】
题目:https://www.luogu.org/problemnew/show/P1216 题意: 给定一个三角形.从顶走到底,问路径上的数字之和最大是多少. 走的时候可以往左下(实际上纵坐标不变) ...
- 洛谷P1216数字三角形题解
题目 这道题是一个典型的DP,可以用倒推,顺推的方法,来解这道题.当然用不同的方法他的循环次序是不一样的,所以我们一定要深刻地理解题目的大意,再采用状态转移方程与边界每次求出最优解,并记录循环一遍后就 ...
- 洛谷P1553 数字翻转(升级版)
题目链接 https://www.luogu.org/problemnew/show/P1553 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的 ...
- 【洛谷P1118】数字三角形
数字三角形 题目链接 4 16 3 1 2 4 3 1 2 4 (3+1) (1+2) (2+4)(3+1+1+2) (1+2+2+4) (3+1+1+1+2+2+2+4)16=1*3+3*1+3*2 ...
- Luogu1738 | 洛谷的文件夹 (Trie+STL)
题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:\(/luogu/application ...
随机推荐
- org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.*.Paper.totalTime
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:109) at o ...
- RescuePro Deluxe恢复软件SanDisk
RescuePro Deluxe恢复软件 注册码:RPDLX-0600-67844-04261-27951 买硬盘送的,没有用. 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- mariadb multi-source replication(mariadb多主复制)
下文一起来看看mariadb multi-source replication(mariadb多主复制)例子,希望对各位有帮助. mariadb multi-source replication( ...
- JSOUP爬虫示例
利用JSOUP做爬虫,爬取我博客中的所有标题加链接,代码示例如下: package com.test.jsoup; import java.io.IOException; import org.jso ...
- Android 使用WebView加载含有Canvas的页面截屏处理
无法截屏主要原因是webview渲染方式所导致:只需要AndroidManifest.xml中设置属性Android:hardwareAccelerated=”false”.
- cmake 常用变量和常用环境变量查表手册---整理 .
一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种 ...
- 一个textview多种颜色
//方法1 TextView textView = (TextView) view.findViewById(R.id.text); SpannableString ss = new Spannabl ...
- 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅
在第一篇教程中,我们展示了如何使用start.spring.io来利用Spring Initializr创建一个具有RabbitMQ starter dependency的项目来创建spring-am ...
- MAC OS X显示.开头的文件_苹果操作系统显示隐藏文件命令
转自:http://dditblog.com/blog_446.html 今天在导入Eclipse项目的时候.发现导入不了.初步估计是因为项目没有.project的文件.在Mac OS X操作系统下面 ...
- Oracle的NVL函数用法
从两个表达式返回一个非 null 值. 语法 NVL(eExpression1, eExpression2) 参数eExpression1, eExpression2 如果 eExpression1 ...