Codeforces 677D Vanya and Treasure BFS+DP (分段)

本文介绍了一种求解特定地图上按顺序收集所有钥匙的最小花费问题的算法。通过使用动态规划的方法,结合广度优先搜索优化大数量级的点对之间的状态转移,实现了高效的解决方案。

题意:n*m地图,保证至少有一个点为a[i][j]=x (x=[1..p]),两点花费为其曼哈顿距离.
n,m<=300,p<=n*m,问从(1,1)出发,按顺序拿到钥匙(1..p)时的最小花费?

设f[i][j] 从起点到(i,j)(1-a[i][j]已经拿完)的最小花费.
相邻两组数量都很大时,转移最坏情况O((nm)^2)
cnt[x]*cnt[x+1]>=n*m,最多sqrt对,bfs暴力更新
sum(cnt[x]*cnt[x+1]<n*m) 总对数<=n*m*sqrt(nm). 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
typedef pair<int,ii> pii;
const int inf=0x3f3f3f3f;
const int N=3e2+20;
vector<ii> v[N*N];
int n,m,p,a[N][N],f[N][N];
int dis(int x,int y,int a,int b)
{
	return abs(x-a)+abs(y-b);
}
int *ans;
void init()
{
	for(int i=0;i<=n*m;i++)
		v[i].clear();
	memset(f,inf,sizeof(f));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&a[i][j]),v[a[i][j]].push_back(ii(i,j));
			if(a[i][j]==1)
				f[i][j]=dis(1,1,i,j);
			if(a[i][j]==p)
				ans=&f[i][j];
		}
	}
}
queue<ii> q;
int dx[]={-1,1,0,0},w[N][N];
int dy[]={0,0,-1,1};
void bfs(int dep)
{
	memset(w,inf,sizeof(w));
	for(int i=0;i<v[dep].size();i++)
	{
		int x=v[dep][i].first,y=v[dep][i].second;
		q.push(v[dep][i]);
		w[x][y]=f[x][y];
	}
	while(!q.empty())
	{
		ii t=q.front();
		q.pop();
		int x=t.first,y=t.second,dis=w[x][y];
		for(int i=0;i<4;i++)
		{
			int c=x+dx[i],d=y+dy[i];
			if(c>=1&&c<=n&&d>=1&&d<=m)
			{
				if(w[c][d]>dis+1)
				{
					w[c][d]=dis+1;
					if(a[c][d]==dep+1)
						f[c][d]=dis+1;
					q.push(ii(c,d));
				}
			}
		}
	}
}
void solve()
{	
	for(int k=2;k<=p;k++)
	{
		if(v[k-1].size()*v[k].size()<n*m)
		{	 
			for(int i=0;i<v[k-1].size();i++)
			{
				for(int j=0;j<v[k].size();j++)
				{
					int x=v[k][j].first,y=v[k][j].second;
					int c=v[k-1][i].first,d=v[k-1][i].second;
					f[x][y]=min(f[x][y],f[c][d]+dis(x,y,c,d));
				}
			}
		}
		else
			bfs(k-1);
	}
	printf("%d\n",*ans);
}
int main()
{
	while(cin>>n>>m>>p)
	{
		init();
		solve();
	}	
	return 0;	
} 


proof:
a+b>=2sqrt(ab)
2mn=2*sum(cnt[x]) >=((cnt[1]+cnt[2])+(cnt[2]+cnt[3])...)>=2sqrt(cnt[i]*cnt[i+1])(i=1..p-1)
cnt[i]*c[i+1]>=mn的,最多sqrt(mn)对

proof

cnt[x]*cnt[x+1]<n*m  min(cnt[x],cnt[x+1])*max(cnt[x]*cnt[x+1]) <n*m
得 min(cnt[x],cnt[x+1])<sqrt(nm)
sum(cnt[x]*cnt[x+1])<=sqrt(nm)*(max(cnt[x],cnt[x+1])+max(cnt[x+1],cnt[x+2])...)

sum(cnt[x]*cnt[x+1])<=sqrt(nm)*nm



内容概要:本文档围绕含混合式抽水蓄能的梯级水电系统多时间尺度调度策略展开科研复现研究,重点通过Matlab代码实现源网荷储协同优化模型。研究构建了涵盖日前、日内与实时三个时间尺度的优化调度框架,充分结合抽水蓄能电站的灵活调节能力,提升梯级水电系统在大规模新能源接入背景下的运行效率、灵活性与稳定性。文档不仅提供了具体优化建模与算法实现的技术路径,还扩展介绍了大量相关科研方向,包括智能优化算法、机器学习、电力系统优化、路径规划、综合能源系统、算力-电力耦合、微电网控制等,形成完整的科研技术支撑体系,适用于开展高水平电力系统调度与能源优化研究。; 适合人群:具备电力系统分析、优化理论基础和Matlab编程能力,从事能源系统调度、智能电网、可再生能源集成、综合能源系统等方向研究的科研人员与研究生。; 使用场景及目标:① 实现含混合式抽水蓄能的梯级水电系统在多时间尺度下的协同优化调度;② 掌握基于Matlab的电力系统建模、优化求解与仿真分析方法,提升科研复现与工程应用能力;③ 为综合能源系统、微电网、源网荷储协同控制等前沿领域的研究提供模型参考与技术范例。; 阅读建议:建议读者结合文档提供的网盘资源与Matlab代码进行实践操作,按照研究主题循序渐进地学习,重点关注多时间尺度优化模型的构建逻辑、约束条件设置与算法实现细节,同时可参考文档所列的其他相关研究方向拓展学术视野。
内容概要:本文系统对比了GEO优化中的关键词导向与实体导向两种方法论,指出随着大模型从关键词匹配向语义理解和实体推理演进,传统基于关键词堆砌的优化方式已触及天花板,而以构建实体关系网络为核心的实体导向GEO成为突破瓶颈的关键。文章提出“张钧泽GEO两代方法论演进模型”,强调二者并非替代而是递进关系:关键词优化解决“被搜到”的基础收录问题,实体导向则通过实体标准化、属性填充和关系构建实现“被理解、被信任”的高阶目标。基于40个站点的实证数据,实体导向在引用率(平均9.7% vs 3.2%)、权重稳定性、长期价值等方面全面超越关键词导向,并具备复利积累效应。文中还提供了从诊断到升级的三步路径、组合策略及自查工具,指导团队根据不同发展阶段选择适配策略。; 适合人群:从事GEO优化、内容运营、AI搜索优化的相关从业者,尤其是有一定内容基础但遭遇效果瓶颈的垂直领域网站运营团队和技术负责人。; 使用场景及目标:①识别当前GEO优化所处阶段并制定升级路径;②突破引用率增长瓶颈,提升大模型对内容的采信与引用;③在竞争激烈的领域建立基于实体网络的长期权威护城河;④实现从短期见效到可持续增长的战略转型。; 阅读建议:建议结合文中的八维度对比表、演进模型和落地工具,先评估自身现状,再按“先基础后进阶”原则逐步推进,重点关注实体关系构建而非简单提及实体名称,坚持长期投入以发挥复利效应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值