返回顶部
首页 > 资讯 > 前端开发 > VUE >JavaScript中dis[i][j][u]怎么算
  • 457
分享到

JavaScript中dis[i][j][u]怎么算

2024-04-02 19:04:59 457人浏览 薄情痞子
摘要

这篇“javascript中dis[i][j][u]怎么算”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一

这篇“javascript中dis[i][j][u]怎么算”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript中dis[i][j][u]怎么算”文章吧。

一看数据规模,n≤12,果断状压。

然后起点要枚举,就设dp状态:

f[i][j]=以i为起点到j状态的最小花费

其中j是一个二进制数(用十进制来表示)第i位的1、0分别表示是否已经到达第i点(1表示已经到达,0表示还未到达)

(因为m很大,n很小,会有重边,所以用邻接矩阵(e[u][v]))

由此可以列出状态转移方程:

f[i][j]=min{f[i][k]+diss[i][k][u]*e[u][v]}

(j&(1<<(u-1))!=0,j&(1<<(v-1))!=0,i!=v,k=j^(1<<(v-1)),e[u][v]!=1e9)

(e[u][v]!=1e9说的就是u、v之间有边)

什么意思?就是说我们再找一个状态(k)比当前状态(j)只少一个点(显然不能是起点),然后从k向j拓展,在所有的k中取花费最少的那种。

但是还有一个问题,该边的花费怎么算?

根据题目描述,就将该边长度乘上起点到uu经过的点数(dis[i][j][u])即可。

问题又来了,dis[i][j][u]怎么算?

每次状态转移的时候顺便转移一下即可

代码如下:

#include<cstdio>

inline int read(){
	int r=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')r=(r<<1)+(r<<3)+c-'0',c=getchar();
	return r*f;
}

int n,ans=1e9,m,f[15][5005],e[15][15],dis[15][5005][15];

inline int min(int a,int b){
	return a<b?a:b;
}

int main(){
	freopen("treasure.in","r",stdin);
	freopen("treasure.out","w",stdout);
	n=read(),m=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			e[i][j]=1e9;
	for(int i=1;i<=m;i++){
		int u=read(),v=read();
		if(u-v)e[u][v]=e[v][u]=min(e[u][v],read());
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<1<<n;j++)
			f[i][j]=1e9;
	for(int i=1;i<=n;i++){
		f[i][1<<(i-1)]=0;
		dis[i][1<<(i-1)][i]=1;
		for(int j=(1<<(i-1))+1;j<1<<n;j++){
			if(!(j&(1<<(i-1))))continue;
			int x=j,u=1;
			while(x){
				if(x&1){
					for(int v=1;v<=n;v++){
						if(i==v||e[u][v]==1e9||!(j&(1<<(v-1))))continue;
						int k=j^(1<<(v-1));
						if(f[i][j]>f[i][k]+dis[i][k][u]*e[u][v]){
							f[i][j]=f[i][k]+dis[i][k][u]*e[u][v];
							for(int y=1;y<=n;y++)dis[i][j][y]=dis[i][k][y];
							dis[i][j][v]=dis[i][k][u]+1;
						}
					}
				}
				u++;
				x>>=1;
			}
		}
		ans=min(ans,f[i][(1<<n)-1]);
	}
	printf("%d",ans);
	return 0;
}

以上就是关于“JavaScript中dis[i][j][u]怎么算”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网VUE频道。

--结束END--

本文标题: JavaScript中dis[i][j][u]怎么算

本文链接: https://lsjlt.com/news/95549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript中dis[i][j][u]怎么算
    这篇“JavaScript中dis[i][j][u]怎么算”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一...
    99+
    2024-04-02
  • javascript中怎么算取余
    这篇文章主要介绍“javascript中怎么算取余”,在日常操作中,相信很多人在javascript中怎么算取余问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”javascri...
    99+
    2024-04-02
  • HTML中i标签怎么用
    这篇文章给大家分享的是有关HTML中i标签怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。     HTML<i>标签   &n...
    99+
    2024-04-02
  • thinkphp中i方法怎么用
    这篇文章主要介绍“thinkphp中i方法怎么用”,在日常操作中,相信很多人在thinkphp中i方法怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”thinkphp中i方法怎么用”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • javascript中循环次数怎么算
    在JavaScript中,循环语句是经常被用到的语句之一。循环语句就是重复执行一段代码块,直到满足某个条件为止,这个条件可以是值等于某个指定的值,或者某个布尔表达式为真等等。在使用循环语句时,我们需要考虑到循环的次数,因为循环次数的多少可能...
    99+
    2023-05-14
  • JavaScript中逗号运算符怎么用
    这篇文章将为大家详细讲解有关JavaScript中逗号运算符怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。逗号运算符逗号运算符( ,)用来评估其每个操作数(从左到右)并返回最后一个操作数的值。let...
    99+
    2023-06-27
  • javascript中instanceof运算符怎么使用
    在JavaScript中,instanceof运算符用于检查一个对象是否是某个构造函数的实例。它的使用方法如下:```javascr...
    99+
    2023-08-12
    javascript instanceof
  • JavaScript中怎么计算元素的位置
    这篇文章给大家介绍JavaScript中怎么计算元素的位置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、js计算相对于浏览器视窗的元素绝对位置<!DOCTYPE h...
    99+
    2024-04-02
  • JavaScript位运算符怎么运算的
    JavaScript中的位运算符用于对数字的二进制表示进行操作。下面是常见的位运算符及其运算方式:1. 按位与(&):对两个数字的每...
    99+
    2023-10-11
    JavaScript
  • JavaScript运算符怎么用
    这篇文章主要介绍了JavaScript运算符怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏...
    99+
    2023-06-14
  • JavaScript怎么计算除法
    这篇文章将为大家详细讲解有关JavaScript怎么计算除法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可...
    99+
    2023-06-15
  • javascript怎么才算精通
    随着互联网和技术的高速发展,Javascript已经成为项目开发中最常用的编程语言之一。如果你想成为一个出色的前端Javascript开发工程师,那么必须具备一些技能和经验,并且需要对Javascript有深入的理解。本文将介绍Javasc...
    99+
    2023-05-21
  • windows中u盘驱动器怎么恢复普通u盘
    本篇内容主要讲解“windows中u盘驱动器怎么恢复普通u盘”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows中u盘驱动器怎么恢复普通u盘”吧!u盘驱动器恢复普通u盘的方法:1、首先按...
    99+
    2023-06-30
  • 怎么在JavaScript中使用三元运算符
    本篇文章给大家分享的是有关怎么在JavaScript中使用三元运算符,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript可以做什么1.可以使网页具有交互性,例如响...
    99+
    2023-06-14
  • 怎么在javascript中使用相等运算符
    这篇文章给大家介绍怎么在javascript中使用相等运算符,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、相等运算符比较不严格。如果两个操作数量不是同一种类型,那么相等运算符就试着进行一些类型的转换,然后进行比较。...
    99+
    2023-06-15
  • 怎么使用Javascript运算符
    本篇内容主要讲解“怎么使用Javascript运算符”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Javascript运算符”吧!1 运算符基础1.1 ...
    99+
    2024-04-02
  • javascript怎么才算学会了
    随着互联网技术的发展,JavaScript已经成为了前端开发的重要语言之一。掌握好JavaScript,可以使开发者在网站和应用程序的开发中更加熟练和高效。那么,怎样才能算是真正掌握了JavaScript呢?首先,JavaScript的基础...
    99+
    2023-05-21
  • JavaScript 中怎么实现一个二叉树算法
    这篇文章将为大家详细讲解有关JavaScript 中怎么实现一个二叉树算法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。二叉树和二叉搜索树介绍二叉树中的节点...
    99+
    2024-04-02
  • javascript中的运算符有哪些及怎么用
    今天小编给大家分享一下javascript中的运算符有哪些及怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2024-04-02
  • html中<i>斜体标签怎么用
    这篇文章主要为大家展示了“html中<i>斜体标签怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“html中<i>斜体标签怎么用”这...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作