算法设计与分析 5.1 合并果子
时间:2019-12-22
本文章向大家介绍算法设计与分析 5.1 合并果子,主要包括算法设计与分析 5.1 合并果子使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
★题目描述
GYY面前有N堆果子,分别有1,2,3,。。。。,N个果子,这N堆果子一开始按照某种顺序排列。
GYY有一种独特的魔法,他每轮操作会依次把第i+1堆的果子复制一份加到第i堆上,最后舍弃掉最后一堆。
N轮操作之后,就只剩下一堆果子了(废话)。
然而当GYY忙活完这一切的时候,他发现他忘了自己一开始的N堆果子是怎么摆放的了,
现在给你操作轮次数和最后那堆果子的数量,找到一个满足条件的初始排列
如果有多个解则输出字典序最小的那一个。
★输入格式
输入仅一行,包括两个正整数N和Sum,表示一开始有N堆果子
操作了N轮后剩下的那堆果子有Sum个。
★输出格式
输出包括N个整数,相邻两个整数之间用空格隔开,如果无解则输出“GG”,
如果多解输出字典序最小的那一组解。
注意,行末多余的空格可能会导致答案错误。
★样例输入
4 16
★样例输出
3 1 2 4
★提示
3 1 2 4
4 3 6
7 9
16
对于60%的数据,N <= 7;
对于100%的数据,N <= 12, Sum <= 20000。
★参考代码
/*
每堆果子合并次数的规律符合杨辉三角
下面是一个杨辉三角
1
1 1
1 2 1
1 3 3 1
用杨辉三角作为系数, 乘上每堆果子的数量应该为sum
1*3 + 3*1 + 3*2 + 1*4 = 16
数据量好像不大,尝试一下回溯穷举果子数量的排列
所以接下来的问题就是按照字典序的顺序生成果子数量方案
生成全排列方案可以使用next_permutation
*/
#include<bits/stdc++.h>
using namespace std;
int N,Sum;
int yhs[13];
int res[13];
int ok=0;
int IsCorr(){
int ans=0;
for(int i=1; i<=N; ++i) ans+=yhs[i]*res[i];
return Sum==ans;
}
int main(){
scanf("%d%d",&N, &Sum);
//构造杨辉三角
memset(yhs, 0, sizeof(yhs)), yhs[1]=1;
for(int k=2; k<=N; ++k){
for(int i=k; i>0; --i){
yhs[i]=yhs[i]+yhs[i-1];
}
}
//穷举每堆果子可能的个数,按字典序穷举
for(int i=1; i<=N; ++i) res[i]=i;
do {
if(IsCorr()){
ok=1;
break;
}
} while(next_permutation(res+1, res+N+1));
//结果输出
if(ok){
for(int i=1; i<=N; ++i) printf("%d ",res[i]);
printf("\n");
}
else printf("GG\n");
return 0;
}
原文地址:https://www.cnblogs.com/yejifeng/p/12080000.html
- Leetcode-Easy21. Merge Two Sorted ListsDefinition for singly-linked list.class ListNode:def init(sel
- Burp Suite详细使用教程-Intruder模块详解
- 逆元的三种解法(附详细证明)
- JavaScript设计模式与开发实践 - 单例模式
- Leetcode-Easy 141. Linked List Cycle
- 【DataMagic】如何在万亿级别规模的数据量上使用Spark
- 51nod1004 n^n的末位数字
- Leetcode-Easy 20. Valid Parentheses
- Leetcode-Easy 234. Palindrome Linked List
- 为什么是link-visited-hover-active
- 51Nod 1051 最大子矩阵和
- Javascript之创建对象
- Leetcode-Easy 136. Single Number
- 2017.10.25水题大作战题解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 7. Pandas系列 - 排序和字符串处理
- JVM调优,程序员必须掌握的知识
- 5分钟Flink - 侧输出流(SideOutput)
- 数据库技术:MySQL 基础和 SQL 入门,单表、约束和事务
- ConcurrentHashMap的size方法是线程安全的吗?
- 数据科学家极力推荐核心计算工具-Numpy的前世今生(上)
- 数据库技术:MySQL 多表,外键约束,数据库设计,索引,视图,存储过程触发器,数据控制,数据备份与恢复
- WordPress 站点地址被恶意篡改的防护方案讨论
- 握草,你竟然在代码里下毒!
- MySQL 练习题和答案,以及运行结果截图
- 给你一个优秀的Django工程模板
- 纯css实现选项卡功能
- linux每日一练文件专题之常用文件命令(附昨日答案)
- 搞懂JavaScript全局变量与局部变量,看这篇文章就够了
- Day3-linux用户管理