当前位置: 首页 > news >正文

洛谷P2765 魔术球问题(贪心 最大流)

题意

已经很简洁了吧。

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

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

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

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

Sol

这题有两种做法

1:贪心,能放就放

2:网络流

首先考虑到每个元素只能用因此,拆为$a_i$,$b_i$

从$S$向$a_i$连权值为$1$的边,从$b_i$向$T$连权值为$1$的边

依次枚举加入的每一个数,每次跑最大流,若更优,就不断增广

否则新开一个桶(和贪心很像

我太菜了就写个贪心吧。。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<map>
#include<iostream>
using namespace std;
const int MAXN = 1e4 + 10, INF = 1e9 + 10;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = 1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N;
vector<int> v[57];
map<int, bool> mp;    
int can(int x, int n) {
    for(int i = 1; i <= n; i++) {
        int m = v[i].size();
        if(m == 0) continue;
        if(mp[v[i][m - 1] + x] == 1) {
            v[i].push_back(x); 
            return 1;
        }
    }
    return 0;
}
int main() {
    for(int i = 1; i <= 10000; i++) mp[i * i] = 1;
    N = read();
    int now = 0;
    for(int i = 1; i <= N + 1; ) {
        while(can(++now, i));
        v[i++].push_back(now);
    }
    printf("%d\n", now - 1);
    for(int i = 1; i <= N; i++, puts(""))
        for(int j = 0; j < v[i].size(); j++)
            printf("%d ", v[i][j]);
    
    return 0;
}

 

 

相关文章:

  • Linux鸟哥(总)
  • JQuery 选择器与过滤器(随手笔记)
  • python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学
  • Django - 一对多数据示例
  • Apache 年度报告:Java 是项目开发使用最多的语言
  • SendSms短信发送相关记录
  • SQL Server2016 配置管理器
  • java 判断请求来自手机端还是电脑端
  • javascript - 封装ajax
  • 一例exchange DAG 成员服务器添加数据库副本的错误
  • UI设计能力质变方法论 - 设计师, 请理解什么是组件
  • 【MyBatis】缓存配置
  • HTTP协议初步认识
  • 联想启天M715E安装硬盘保护系统和网络同传
  • 通过全备+binlog_server同步恢复被drop的库或表
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • es6要点
  • If…else
  • PAT A1017 优先队列
  • Python学习之路13-记分
  • 百度地图API标注+时间轴组件
  • 成为一名优秀的Developer的书单
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 盘点那些不知名却常用的 Git 操作
  • 前端知识点整理(待续)
  • 少走弯路,给Java 1~5 年程序员的建议
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 微信小程序开发问题汇总
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​ssh免密码登录设置及问题总结
  • #define与typedef区别
  • #QT(串口助手-界面)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转载)Linux网络编程入门
  • .Net - 类的介绍
  • .Net 8.0 新的变化
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 反射 Reflect
  • .net 获取url的方法
  • .NET开发者必备的11款免费工具
  • @media screen 针对不同移动设备
  • @ModelAttribute注解使用
  • [20170713] 无法访问SQL Server
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [DevEpxress]GridControl 显示Gif动画
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例
  • [flask]http请求//获取请求体数据