魔术球问题弱化版 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

我也不知道这个问题是哪里来的,所以没有题目链接...但是文末会给出几组数据。

题目描述

假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的球。

(1)每次只能在某根柱子的最上面放球。

(2)在同一根柱子中,任何 2 个相邻球的编号之和为完全平方数。

试设计一个算法,计算出在 n 根柱子上最多能放多少个球。

例如,在 4 根柱子上最多可放 11 个球。

对于给定的 n,计算在 n 根柱子上最多能放多少个球。

输入描述

第 1 行有 1 个正整数 n,表示柱子数。

输出描述

一行表示可以放的最大球数。

样例输入:4

样例输出:11

题目限制(为什么说弱化版就在这里)

N<=60

分析:

这题已经水得不要不要的......

贪心直接做就可以。每次都把新的数从第一个柱子开始放,合适的话就放下,不合适换下一个柱子。

上面的贪心证明起来难度很大,但是“看起来好像很对的样子”。

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 inline void read(int &x)
 7 {
 8     char ch = getchar();char c;x = 0;
 9     while(ch < ‘0‘ || ch > ‘9‘)    c = ch,ch = getchar();
10     while(ch >= ‘0‘ && ch <= ‘9‘)    x = x*10+ch-‘0‘,ch = getchar();
11     if(c == ‘-‘)    x = -x;
12 }
13 const int MAXN = 300 ;
14 int post[MAXN];//记录某柱子最顶端的数字
15 int main()
16 {
17     int n,x,ans = 0;
18     read(n);
19     int i = 1;
20     for(;;i ++)
21     {
22         for(int j = 1;j <= n;j ++)
23         {
24             x = sqrt(i + post[j]);
25             if(x*x == i+post[j] || post[j] == 0)
26             {
27                 ans ++;
28                 post[j] = i;
29                 break;
30             }
31             if(j == n)
32             {
33                 printf("%d",ans);
34                 return 0;
35             }
36         }
37     }
38 }

测试数据:

输入#1:10  输出#1:59

输入#2:17  输出#2:161

输入#3:50  输出#3:1299

输入#4:60  输出#4:1859

输入#5:1    输出#5:1

时间: 2024-08-01 19:07:59

魔术球问题弱化版 题解的相关文章

7.4 魔术球问题弱化版

题目描述 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,-的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何 2 个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在 n 根柱子上最多能放多少个球.例如,在 4 根柱子上最多可放 11 个 对于给定的 n,计算在 n 根柱子上最多能放多少个球. 输入描述 第 1 行有 1 个正整数 n,表示柱子数. 输出描述 一行表示可以放的最大球数 4 样例输出. 样例输入 11 题目限制(为什么

【水】弱化版魔术球问题

卖个萌 这是一个弱化版的魔术球问题,本来都不好意思丢上来...但是这几天都在看代码没有写东西,还是丢一下凑凑数吧. 不要问我正解哪里进,我也没找到,反正百度魔术球问题第一页都是错的.所有代码都跑不出结果.600这么low的数据没有一个所谓AC代码可以跑的过(似乎我代码加了输出方案也过不去..).所以后面我的数据600就是用没有加输出方案的我的弱弱的程序跑的... 我的代码加了输出方案丢在最后附数据的文章里面了..错的,不过我会尽快改对的..... 魔术球问题弱化版(ball.c/.cpp/.pa

【网络流24题】魔术球

LOJ 6003 [网络流24题]魔术球 题面 [题目描述] 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,4,? 的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何 2个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在 n 根柱子上最多能放多少个球. [输入格式] 文件第 1 行有 1 个正整数 n(n <= 50) ,表示柱子数. [输出格式] 第一行是球数.接下来的 n 行,每行是一根柱子上的球的编号. 题解 能放的球数非常少,所以我们

【网络流24题】魔术球问题(最小不相交路径覆盖)

[网络流24题]魔术球问题 2014年3月7日3,5344 Description 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,4的球.(1)每次只能在某根柱子的最上面放球.(2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数.试设计一个算法,计算出在n根柱子上最多能放多少个球.例如,在4 根柱子上最多可放11 个球. 编程任务:对于给定的n,计算在n根柱子上最多能放多少个球. Input Format 文件第1 行有1个正整数n,表示柱子数. Output Fo

网络流二十四题之魔术球问题

P2765 魔术球问题 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在n根柱子上最多能放多少个球.例如,在4 根柱子上最多可放11 个球. «编程任务: 对于给定的n,计算在n根柱子上最多能放多少个球. 输入输出格式 输入格式: 第1 行有1个正整数n,表示柱子数. 输出格式: 程序运行结束时,将n 根柱子上最

POWOJ 1739: 魔术球问题 DAG最小路径覆盖转最大流

1739: 魔术球问题 题意: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在n根柱子上最多能放多少个球.对于给定的n,计算在n根柱子上最多能放多少个球. tags: 对大佬来说应该是很素的一道题,但某还是花了好多时间才做出来.. 一开始连建图都有点懵,然后最小路径还是新概念,最大匹配也不太懂,最大流倒是会一点. 然后要打印答案,也不

【网络流24题】魔术球问题

P1226 - [网络流24题]魔术球问题 Description 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为 1,2,3,4......的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在n根柱子上最多能放多少个球.例如,在4 根柱子上最多可 放11个球. ′编程任务: 对于给定的n,计算在 n根柱子上最多能放多少个球. Input 第1 行有 1个正整数n,表示柱子数. Output 第一行是球

cogs_396_魔术球问题_(最小路径覆盖+二分图匹配,网络流24题#4)

描述 http://cojs.tk/cogs/problem/problem.php?pid=396 连续从1开始编号的球,按照顺寻一个个放在n个柱子上,\(i\)放在\(j\)上面的必要条件是\(i+j\)是一个完全平方数.问做多能放到几号球. 分析 cogs是简化版,我在网上找了个完整版的测试数据,要求输出方案... 求最大放几号球不方便,我们考虑枚举最大的球号,计算最少需要多少柱子. 我们对于满足\(j<i\)且\(i+j\)是一个完全平方数的\(i,j\),从\(j\)向\(i\)连一条

魔术球问题 2011-12-29

算法实现题8-4 魔术球问题(习题 8-14) ´问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为 1,2,3,¼的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在n根柱子上最多能放多少个球.例如,在4 根柱子上最多可放11个球. ´编程任务: 对于给定的n,计算在 n根柱子上最多能放多少个球. ´数据输入: 由文件input.txt提供输入数据.文件第1 行有 1个正整数n,表示柱子数.