【过题记录】8.4(robocom补题,网络流)

news2024/10/2 18:18:45

今天robocom国赛,因为一个bool函数忘记return 1而裂开(错失21分)
以此为戒


贪心消消乐

在这里插入图片描述


其实就是一个求最大子矩阵和的板子题
利用最大子段和的思想
枚举矩阵中的上下界
压成一维后利用最大子段和 O ( n ) O(n) O(n)处理
复杂度 O ( n 3 ∗ k ) O(n^3*k) O(n3k)
k为执行次数


#include<bits/stdc++.h>
using namespace std;

#define int long long

const int N = 5010;
int a[N][N];
int n;
int sum[N][N];
int maxn = 0;
int s[N][N],ss[N][N];
int tot = 0;
int stx,sty,edx,edy,xx,XX,yy,YY;
int cnt = 0;

void Swap(){
	xx = sty; XX = edy; yy = stx; YY = edx;
} 
int ce =0 ;
bool Work(){
	for (int i = 1; i <= n; i++)
	  for (int j = 1; j <= n; j++){
	  	  s[j][i] = s[j][i-1]+a[i][j];
		  ss[j][i] = ss[j][i-1];
		  if (a[i][j] == 0) ss[j][i]++; 
	  }
	int maxx = 0;
	xx = n+1; yy = n+1; XX = n+1; YY = n+1;
	for (stx = 1; stx <= n; stx++){
		for (edx = stx; edx <= n; edx++){
			int sum = 0;
			sty = 1;
			for (edy = 1; edy <= n; edy++){
				if (sum > maxx) Swap();
				int now = s[edy][edx]-s[edy][stx-1];
				int nowz = ss[edy][edx]-ss[edy][stx-1];
				if (nowz!=0){
					sty = edy+1;
					sum = 0;
					continue;
				}
			    if (sum < 0){
				    sum = 0;
				    sty = edy;
				}
				sum+=now;
				if (sum > maxx) maxx = sum,Swap();
				if (sum == maxx){
					if (sty < xx) Swap();
					else if (sty == xx&&stx < yy) Swap();
					else if (sty == xx && stx == yy&&edy < XX) Swap();
					else if (sty == xx && stx == yy&&edy == XX && edx < YY) Swap();
				}
			}
		}
	}
	if (maxx == 0) return 0;
	tot+=maxx;
	printf("(%lld, %lld) (%lld, %lld) %lld\n",xx,yy,XX,YY,maxx);
    swap(xx,yy); swap(XX,YY);
	int delx = XX-xx+1;
	for (int i = xx-1; i >= 1; i--)
	  for (int j = yy; j <= YY; j++)
	    a[i+delx][j] = a[i][j];
	for (int i = 1; i <= delx; i++)
	  for (int j = yy; j <= YY; j++) a[i][j] = 0;
	cnt++;
	bool f = 0;
	return 1;
}

signed main(){
	cin>>n;
	for (int i = 1; i <= n; i++)
	  for (int j = 1; j <= n; j++){
	      cin>>a[i][j];
	      if (a[i][j] > 0) maxn+=a[i][j],ce++;
	  }
	while (Work()); cout<<tot<<endl;
}

拍照

一道最大权值闭合图的板子题
按如下方式连边:
在这里插入图片描述

最大全职就是 s u m − m a x f l o w sum-maxflow summaxflow
证明尚未完全理清
等我理清了来补


#include<bits/stdc++.h>
using namespace std;

const int N = 7e3+100,inf = 1e9+7;
struct Node{
	int y,Next,v;
}e[2*N];
int len,Linkk[N];
int st,ed;

void Insert(int x,int y,int v){
	e[++len] = (Node){y,Linkk[x],v};
	Linkk[x] = len;
}

queue < int > q;
int d[N];

bool bfs(){
	for (int i = 1; i <= ed; i++) d[i] = 0;
	while (q.size()) q.pop();
	d[st] = 1; q.push(st);
	while (q.size()){
		int x = q.front(); q.pop();
		for (int i = Linkk[x]; i; i = e[i].Next){
			int y = e[i].y; if (!e[i].v ||d[y]) continue;
			d[y] = d[x]+1; q.push(y);
			if (y == ed) return 1;
		}
	}
	return 0;
}

int dinic(int x,int flow){
	if (x == ed) return flow;
	int re = flow , k;
	for (int i = Linkk[x]; i; i = e[i].Next){
		int y = e[i].y; if (!e[i].v || d[y] != d[x]+1) continue;
		k = dinic(y,min(re,e[i].v));
		if (!k) d[y] = 0;
		re-=k;
		e[i].v-=k; e[i^1].v+=k;
	}
	return flow-re;
}

int n,m;
int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
	cin>>m>>n; len = 1;
	st = n+m+1; ed = n+m+2;
	int sum = 0;
	for (int i = 1; i <= m; i++){
		int v; cin>>v; sum+=v;
		Insert(st,i,v); Insert(i,st,0);
		int x;
		cin>>x;
		while (x){
			Insert(i,x+m,inf); Insert(x+m,i,0);
			cin>>x;
		}
	}
	for (int i = m+1,x; i <= m+n; i++)
	  cin>>x,Insert(i,ed,x),Insert(ed,i,0);
	int flow;
	int maxf = 0;
	while (bfs())
	  while (flow = dinic(st,inf)) maxf+=flow;
	cout<<sum-maxf<<endl;
	return 0;
}

太空飞行计划问题


与上体一样
所多的就是输出方案
这里最大流用的是dinic算法
如果最后对于一个点i,d[i]不为0,说明这个点在分层图中出现,并且用上了
那么就说明这个仪器用上了


#include<bits/stdc++.h>
using namespace std;

const int N = 7e3+100,inf = 1e9+7;
struct Node{
	int y,Next,v;
}e[2*N];
int len,Linkk[N];
int st,ed;

void Insert(int x,int y,int v){
	e[++len] = (Node){y,Linkk[x],v};
	Linkk[x] = len;
}

queue < int > q;
int d[N];

bool bfs(){
	for (int i = 1; i <= ed; i++) d[i] = 0;
	while (q.size()) q.pop();
	d[st] = 1; q.push(st);
	while (q.size()){
		int x = q.front(); q.pop();
		for (int i = Linkk[x]; i; i = e[i].Next){
			int y = e[i].y; if (!e[i].v ||d[y]) continue;
			d[y] = d[x]+1; q.push(y);
			if (y == ed) return 1;
		}
	}
	return 0;
}

int dinic(int x,int flow){
	if (x == ed) return flow;
	int re = flow , k;
	for (int i = Linkk[x]; i; i = e[i].Next){
		int y = e[i].y; if (!e[i].v || d[y] != d[x]+1) continue;
		k = dinic(y,min(re,e[i].v));
		if (!k) d[y] = 0;
		re-=k;
		e[i].v-=k; e[i^1].v+=k;
	}
	return flow-re;
}

int flag;
int re(){
    char c;int r=0;
    while (c<'0' || c>'9') c=getchar();
    while (c>='0' && c<='9')
    {
        r=r*10+c-'0';
        c=getchar();
    }
    if (c=='\r') flag=1;
    return r;
}

int n,m;
int main(){
//	cin.tie(0);
//	ios::sync_with_stdio(false);
	scanf("%d %d",&m,&n); len = 1;
	st = n+m+1; ed = n+m+2;
	int sum = 0;
	for (int i = 1; i <= m; i++){
		int v; scanf("%d",&v); sum+=v;
		Insert(st,i,v); Insert(i,st,0);
		int x; flag = 0;
		while (getchar() == ' '){
			scanf("%d",&x);
			Insert(i,x+m,inf); Insert(x+m,i,0); 
//			cout<<"x = "<<x<<endl; 
		}
	}
//	cout<<"OK";
	for (int i = m+1,x; i <= m+n; i++)
	  scanf("%d",&x),Insert(i,ed,x),Insert(ed,i,0);
	int flow;
	int maxf = 0;
	while (bfs())
	  while (flow = dinic(st,inf)) maxf+=flow;
	for (int i = 1; i <= m; i++) if (d[i]) cout<<i<<' ';
	cout<<endl;
	for (int i = 1; i <= n; i++) if (d[i+m]) cout<<i<<' '; cout<<endl;
	cout<<sum-maxf<<endl;
	return 0;
}

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

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

相关文章

VSCode开发Go的精准定位

下载Golang安装包 Download and install - The Go Programming Languagehttps://golang.google.cn/doc/install 安装完成后,配置go env go env -w GO111MODULE=on go env -w GOPROXY="https://goproxy.io,direct"

Maven介绍安装【后端 1】

Maven 入门与安装指南 引言 在Java开发领域&#xff0c;Maven作为一款强大的项目管理和构建工具&#xff0c;广受开发者喜爱。它不仅能够帮助我们管理项目依赖&#xff0c;还能统一项目结构&#xff0c;提供跨平台的自动化构建方式。本文将详细介绍Maven的基本概念、安装步骤以…

Face2V人脸向量开发包

Face2V SDK适用于需要人脸检测、人脸特征点和特征向量提取的应用&#xff0c;提供Web API和原生API。官方下载地址&#xff1a;Face2V SDK 。 1、目录组织 Face2V SDK开发包的目录组织说明如下&#xff1a; face2v_sdk | - core # 核心代码目录| -…

【算法】动态规划解决背包问题

应用场景——01背包问题 有一个背包&#xff0c;背包的容量为 4&#xff0c;现有如下物品 要求 1.目标为装入背包的总价值最大&#xff0c;并且重量不超出 2.要求装入的物品不能重复 动态规划算法介绍 1.动态规划算法的核心是&#xff1a;将大问题划分为小问题进行解决&…

函数调用的过程理解_汇编角度

目录 1、调用函数流程&#xff08;main函数调用print函数&#xff09;&#xff1a;Step1 保存main函数现场地址等信息Step2 跳转到print函数的位置Step3 执行print函数的指令Step4 返回main函数&#xff0c;执行下一条指令流程连续性总结 2、其他知识总结 1、调用函数流程&…

竞赛报名管理系统asp.net+sqlserver

竞赛报名管理系统 功能简单 内容单调 适合学习 asp.net 三层架构 sqlserver2022数据库 账号登陆注册 用户管理 克赛管理 竞赛报名 竞赛评分 公告维护 修改密码 新增竞赛 2019数据库版本低 附加不了 需要高版本数据库 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据…

24/8/4算法笔记 梯度下降

通过迭代地调整参数&#xff0c;沿着目标函数梯度的反方向&#xff08;即最陡峭的下降方向&#xff09;进行搜索&#xff0c;从而找到函数的局部最小值。 导入库 import matplotlib.pyplot as plt import numpy as np 构建方程和导数 #构建方程 f lambda x:(x-3.5)**2-4.…

代码随想录算法训练营第二天 | 209. 长度最小的子数组、59. 螺旋矩阵 II

目录 209. 长度最小的子数组1、题目描述2、思路3、code4、复杂度分析 LC59 螺旋矩阵 II1、题目描述2、思路3、code4、复杂度分析 209. 长度最小的子数组 题目链接&#xff1a;209 1、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于…

Netty一

Netty Netty介绍 Netty应用场景 I/O模型 阻塞IO 同步非阻塞IO 异步非阻塞IO BIO NIO AIO对比 Netty线程模型 Reactor模式 单Reactor单线程 单Reactor多线程 主从Reactor多线程 Netty模型 异步模型 Future-Listener机制 TCP粘包拆包基本介绍 Netty内存使用 Netty内存池化 Netty…

PCB设计

PCB设计 一、 元件封装是什么&#xff1f; 元件封装&#xff1a;一是指元件的包装方式&#xff0c;二是指元件的焊盘形状与尺寸。 在绘制PCB板的时候&#xff0c;要保证元件封装绘制正确&#xff0c;否则元件很可能无法焊接到成品板上。 不同的厂家生产的各类元器件的形状、尺…

用uniapp 及socket.io做一个简单聊天app 5

聊天中的通知及好友申请&#xff1a; 如下图效果 聊天的效果&#xff1a; 这里的friends&#xff0c;好友例表&#xff0c;里面有相关代码&#xff1a; <template><view class"friends-container"><view v-if"!isLoggedIn" class"…

【资治通鉴】“ 将欲取之、必先予之 “ 策略 ① ( 魏桓子 割让土地 | 资治通鉴原文分析 | 道德经、周书、吕氏春秋、六韬 中的相似策略 )

文章目录 一、" 将欲取之、必先予之 " 策略1、魏桓子 割让土地2、资治通鉴原文分析 二、" 将欲取之、必先予之 " 类似的原理1、将欲败之&#xff0c;必姑辅之&#xff1b;将欲取之&#xff0c;必姑与之 - 周书2、将欲歙之&#xff0c;必固张之&#xff0c;…

24年第五届“华数杯”数学建模竞赛浅析

需要完整资料&#xff0c;请关注WX&#xff1a;“小何数模”&#xff01; 本次华数杯数模比赛的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&#xff0c;…

24/8/4算法笔记 线性回归

在简单或多元线性回归中&#xff0c;最小二乘法用来估计模型参数&#xff0c;使得预测值与实际值之间的差异&#xff08;残差&#xff09;的平方和最小。 最小二乘法 导入代码包 import numpy as np Xnp.array([[1,1],[2,1]]) X 构建矩阵 ynp.array([14,10]) y linalg是线…

电子电气架构 --- 域控制器在新架构中的功能承担

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

五. TensorRT API的基本使用-build-trt-module

目录 前言0. 简述1. 案例运行2. 代码分析2.1 main.cpp2.2 model.cpp2.3 network.hpp 3. 案例3.1 sample_cbr3.2 sample_resBlock3.3 sample_convBNSiLU3.4 sample_c2f 总结下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学…

力扣第五十二题——N皇后II

内容介绍 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;2 解释&#xff1a;如上图所…

C# ADC数据波形显示

1. 串口显示汉字的程序设计 using System; using System.Text; using System.Windows.Forms;namespace 汉字显示 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private byte[] StringToBytes(string TheString){Encoding FromEncoding Encodin…

鼻咽癌综述

小罗碎碎念 本期推文主题&#xff1a;鼻咽癌综述 这篇文章提供了一个全面的综述&#xff0c;探讨了鼻咽癌&#xff08;NPC&#xff09;的关键研究进展&#xff0c;包括病理机制、治疗、筛查和生物标志物的发展。 文章首先强调了NPC在特定地理区域的流行情况&#xff0c;并讨论了…

微分方程的数值解法——Runge-Kutta (RK4)

Runge-Kutta (RK4)   The Runge-Kutta (RK4) methods are used to solve the solution of the non-liner ordinary differential equation. Here, we will simply summary this method.   Assume the Intial Value Piont (IVP) is satisfied: y ′ f ( t , y ) , y ( t 0 )…