魔术球问题

题目大意:

\(n\) 个柱子,依次将若干个球放上去,要满足:

1.每次只能放在柱子的顶端

2.相邻两个球的编号之和必须为完全平方数。

问最多能放几个球?

\((1 \leq n \leq 55)\)

思路:

首先,答案一定不会很大,所以直接暴力一个一个加点,保留原流即可。

代码:

#include <bits/stdc++.h>using namespace std;#define REP(a, b, c) for (register int a = b, _n = c; a <= _n; ++a)
#define DREP(a, b, c) for (register int a = b, _n = c; a >= _n; --a)
#define FOR(a, b, c) for (register int a = b, _n = c; a < _n; ++a)
#define DFOR(a, b, c) for (register int a = b, _n = c; a > _n; --a)
#define EREP(a, b) for (register int a = first[b]; ~a; a = edge[a].nxt)
#define GREP(a, b) for (register int& a = cur[b]; ~a; a = edge[a].nxt)const int SIZE = 4005;
const int s = 0, t = 4000;int n;int now;int first[SIZE], ecnt;
struct Edge {int v, cap, flow, nxt;
} edge[SIZE * SIZE];
void Add_Edge (int u, int v, int cap) {edge[ecnt].v = v;edge[ecnt].cap = cap;edge[ecnt].flow = 0;edge[ecnt].nxt = first[u];first[u] = ecnt++;edge[ecnt].v = u;edge[ecnt].cap = 0;edge[ecnt].flow = 0;edge[ecnt].nxt = first[v];first[v] = ecnt++;
}int d[SIZE];
int cur[SIZE];bool BFS () {memset(d, 0, sizeof d);queue<int> Q;d[s] = 1;Q.push(s);while (!Q.empty()) {int u = Q.front();Q.pop();EREP (i, u) {Edge& e = edge[i];if (!d[e.v] && e.cap > e.flow)d[e.v] = d[u] + 1, Q.push(e.v);}}return d[t];
}
int DFS (int u, int a) {if (u == t || a == 0) return a;int flow = 0, f;GREP (i, u) {Edge& e = edge[i];if (d[e.v] == d[u] + 1 && (f = DFS(e.v, min(a, e.cap - e.flow))) > 0) {e.flow += f;edge[i ^ 1].flow -= f;flow += f;a -= f;}}return flow;
}
int MaxFlow () {int flow = 0;while (BFS()) {REP (i, 1, now)cur[i + n] = first[i + n], cur[i + 2000 + n] = first[i + 2000 + n];REP (i, 1, n)cur[i] = first[i];cur[s] = first[s], cur[t] = first[t];flow += DFS(s, 1e9);}return flow;
}int r[SIZE];
bool mark[SIZE];int main () {memset(first, -1, sizeof first);scanf ("%d", &n);Add_Edge(1, t, n);now = 1;while (1) {Add_Edge(s, now + n, 1);Add_Edge(now + n, 1, 1);REP (i, 1, now - 1) {int x = sqrt(i + now);if (x * x == i + now)Add_Edge(now + n, i + 2000 + n, 1);}Add_Edge(now + 2000 + n, t, 1);if (MaxFlow() == 0) {printf ("%d\n", now - 1);MaxFlow();FOR (i, 1, now) {EREP (j, i + n) {Edge& e = edge[j];if (e.flow == 1) {r[e.v] = i + n;if (e.v == 1) mark[i] = 1;break;}}}FOR (i, 1, now) if (mark[i]) {int x = i + n;while (x) {printf ("%d ", x - n);x = r[x + 2000];}puts("");}return 0;}++now;}
}

转载于:https://www.cnblogs.com/ZPAYAUR/p/11298523.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] svg如何转为字体图标?

[html] svg如何转为字体图标&#xff1f; 选择一个支持在线转换的网站 如IconFont或icomoon上传svg文件的图标在相应的地方进行下载好处字体图标直接用color自由控制颜色&#xff1b;整合在一起&#xff0c;减少http请求等个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后…

乔梁专访——让持续交付变为可能

本月起&#xff0c;图灵社区陆续推出专业IT人访谈版块&#xff0c;首期人物是百度公司项目管理部高级架构师、《持续交付》译者乔梁。   本次访谈分三个主题&#xff1a;   1、 从概念和技术两个层次来解释持续交付   2、.持续交付是可实施的   3、持续交付将变成必备…

java 变量锁_并发编程高频面试题:可重入锁+线程池+内存模型等(含答案)

对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更为考验一个程序员的内功。那到底应该怎么学习并发编程呢? Java SDK的并发工具包有很多,是…

移动端安全 - 安卓Android - 漏洞修复方案整理

敏感数据泄露 明文传输用户名、密码和验证码等敏感信息 MD5/Base64弱加密传输手机、密码等敏感信息 敏感信息在本地加密存储 后台服务器地址泄露。 边信道信息泄漏 在日志中对于密码等敏感信息进行加密存储。 关闭调试接口&#xff0c;禁止输出敏感信息。 未经用户确认调用敏感…

[html] html中如何使用svg?

[html] html中如何使用svg&#xff1f; 1-使用embed标签 推荐优点主流浏览器都支持允许使用脚本缺点不推荐在HTML4和XHTML中使用语法<embed src"svg File Path" type"image/svgxml" width"width" height"height" pluginspage&quo…

element中select默认选中第一个_探索在网页中使用“标注”

github地址&#xff1a;https://github.com/1314mxc/yunUI &#xff0c;欢迎star&#xff01;说起“标注”&#xff0c;在HTML5之前&#xff0c;你可能想起的是各种浏览器插件&#xff0c;emmmmmmm或者说你根本不认为浏览器上可以有这种玩意。但是HTML5来了&#xff0c;这是它的…

ckeditor 框架分析 几个核心“人物”

ckeditor代码中有几个核心的内容&#xff1a; 1. (function(){})(); 2. prototype new 配合&#xff0c;继承属性方法 3. a.event.implementOn() 公共属性扩充 4. e.extend / a.tools.extend 自由扩充 5. a.on 6. j.add 1.(function(){})(); (function(){ //要运行的程序 })();…

项目管理沙龙第五次聚会

项目管理沙龙第五次聚会本次的话题从第30个项目百态模式《短铅笔》开始。“短铅笔”模式里最让人印象深刻的是这一句话“只有把用短的铅笔交上去&#xff0c;才能更换一支长铅笔”。很多人都遇过这样的公司&#xff0c;因为要所谓的“控制成本”&#xff0c;结果却把自己的员工…

算法之排序算法-选择排序与优化

package com.ebiz.sort;import java.text.SimpleDateFormat; import java.util.Date;/*** author YHj* create 2019-07-28 20:58* 选择排序*/ public class Choose {public static void main(String[] args) {int[] arr new int[80000];for (int i 0; i < 80000; i) {arr[…

python 享元模式_python 设计模式之享元(Flyweight)模式

#写在前面这个设计模式理解起来很容易。百度百科上说的有点绕口。#享元模式的定义运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的对橡大幅度减少需要创建的对象数量、避免大量相似类的开销&#xff0c;从而提高系统资源的利用率。#优点相同对象只要保存一…

[html] 怎样在<pre>标签内不转义<和>符号(原样输出html标签)?

[html] 怎样在标签内不转义<和>符号&#xff08;原样输出html标签&#xff09;&#xff1f; 将HTML代码嵌入到<script typetext/html styledisplay:block>中<script type"text/html" style"display: block;">哈哈哈dfdfd</script>…

单列模式

最近在学设计模式&#xff0c;学到创建型模式的时候&#xff0c;碰到单例模式&#xff08;或叫单件模式&#xff09;&#xff0c;现在整理一下笔记。 在《Design Patterns&#xff1a;Elements of Resuable Object-Oriented Software》中的定义是&#xff1a;Ensure a class on…

算法之排序算法-直接插入排序

package com.ebiz.sort;import java.text.SimpleDateFormat; import java.util.Date;/*** author YHj* create 2019-07-29 8:56* 插入排序*/ public class Insert {public static void main(String[] args) {// int [] arr{101,34,119,1};int[] arr new int[80000];for (int i…

佳能g3800故障灯说明书_热水器维修电话|史密斯燃气热水器出现16故障码

热水器出现故障代码其实是一件很常见的事情&#xff0c;大多是住户的热水器都出现过这样的问题&#xff0c;为了防止这样的事情也发生在我身上&#xff0c;我熟读热水器说明书&#xff0c;终于参透其中的道理&#xff0c;那么接下来我为大家介绍史密斯燃气热水器出现16故障码。…

DrawImage内存不足问题

出现这种问题&#xff0c;分析如下&#xff1a; 1.图片太大&#xff0c;绘制完没有及时释放。所谓图片太大&#xff0c;一种是原始图片本身很大&#xff0c;一种是把小图片拉伸到很大的矩形区域显示。 2.图片格式不对或者参数不对。 3.图片不完整。比如图片只下载了一半&#x…

算法之排序算法-shell排序(交换法)

可以先看注释掉的分析,最后在看三层for循环 package com.ebiz.sort;import java.util.Arrays;/*** author YHj* create 2019-07-30 8:53* shell排序-交换法*/ public class Shell{public static void main(String[] args) {int [] arr{8,9,1,7,2,3,5,4,6};getResult(arr);// Sy…

git语言包安装_Git分布式版本管理系统快速入门指南

为什么要使用版本管理系统无论有没有使用过专业化工具&#xff0c;每个人都或多或少地有版本管理的需求。我们在做论文、写报告或者设计方案时&#xff0c;因为难以避免的不断改动&#xff0c;总会形成很多个不同的版本&#xff0c;我们可能会用“某某设计方案_20180910”这样加…

[html] 如何放大点击的区域?

[html] 如何放大点击的区域&#xff1f; <div class"button">点我</div><style>.button{position:relative;}.button::after{content:"";position:absolute;top:-10px;left:-10px;right:-10px;bottom:-10px;}</style>个人简介 我…

(十)、java内部类与内部类的闭包和回调

一、成员内部类 1.可以把一个内部类看做是一个成员。成员内部类可以无条件访问外部类的所有成员属性和成员方法。 class OutterClass {//外部类private int in 0;static int inn4;public OutterClass(int in) {this.in in;}class InnerClass { //内部类public void outpu…

vb.net中滚动条一直显示没有数据时也显示_Android Studio 中 System Trace 的新增功能...

Android Studio 中 System Trace 的新增功能在 Android Studio 4.0 中&#xff0c;我们已经对 CPU Profiler 的 UI 做了大量调整来提供更加直观的工作流记录&#xff0c;而在 Android Studio 4.1 中&#xff0c;我们基于开发者们的反馈对此功能进行了持续改进&#xff0c;并且新…