1006

背景 Background
    在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳、勇敢、善良、团结…… 
   不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物。所以晴天小猪自告奋勇,要去采取这种药草。于是,晴天小猪的传奇故事便由此展开…… 
 描述 Description
    这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在。但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助。 
   山用一个三角形表示,从山顶依次向下有1段、2段、3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左、右、左上、右上四个方向走(**注意**:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段)。 
   晴天小猪从山的左下角出发,目的地为山顶,即隐者的小屋。
 输入格式 Input Format
    第一行有一个数n(2<=n<=1000),表示山的高度。 
   从第二行至第n+1行,第i+1行有i个数,每个数表示晴天小猪在这一段山路上需要爬的时间。
 输出格式 Output Format
    一个数,即晴天小猪所需要的最短时间。

也是一个动态规划的问题,但是自己对于动态规划的理解还是不够,各种窘迫,又一次不得不去参看别人的代码,由于自己水平比较低下,好多别人的代码都理解不了, 有些效率高的代码设计的很精巧,理解起来也极为困难,与之相对,一些容易理解的代码的效率也就不是很高了。最后自己找了一个暴力DP的思想来求解这个问题,期间的问题也是多多,各种被卡,直到很晚,才在博客园一位大牛的博客的启发下修改正确,这个问题将会着重讨论。动态规划啊,啥时候能有点感觉啊……

仍然无耻的把自己的代码贴出来。

#include <stdio.h>
 //#include <Windows.h>
 
 int a[1001][1001];
 long int step[1001][1001];
 int main()
 {
 	int n,i,j,flag = 0;
 	scanf("%d",&n);
 	for (i=1;i<=n;i++)
 	{
 		for(j=1;j<=i;j++)
 		{
 			scanf("%d",&a[i][j]);
 			step[i][j] = 100000;
 		}
 	}
 	step[1][0] = a[1][1];
 	step[1][2] = a[1][1];
 	for (i=2;i<=n;i++)
 	{
 		while(1)
 		{	
 			step[i][0] = step[i][i];
 			step[i][i+1] = step[i][1];
 			flag = 1;
 			for (j=1;j<=i;j++)
 			{
 				//
 				if (step[i][j]>step[i-1][j]+a[i][j])
 				{
 					step[i][j] = step[i-1][j]+a[i][j];
 					flag = 0;
 				}
 				if (step[i][j]>step[i-1][j-1]+a[i][j])
 				{
 					step[i][j] = step[i-1][j-1]+a[i][j];
 					flag = 0;
 				}
 				if (step[i][j]>step[i][j-1]+a[i][j])
 				{
 					step[i][j] = step[i][j-1]+a[i][j];
 					flag = 0;
 				}
 				if (step[i][j]>step[i][j+1]+a[i][j])
 				{
 					step[i][j] = step[i][j+1]+a[i][j];
 					flag = 0;
 				}
 			}
 			if (flag == 1)
 				break;
 		}
 
 	}
 
 	printf("%ld",step[n][1]);
 	//system("pause");
 	return 0;
 
 }
备注:

  1. 首先就是对于题意的理解出现了问题,题目表述不清楚,走的四个方向就把我整晕了,左右好理解,左上右上是啥回事,后来才想明白是三角锥形的排列方式,如下图,每行数据还是圆形排列,就像一个圆锥。
     
    本题可以采用自上而下或者自下而上两种方式来求解,我们采用自上而下的方式。根据上图的排列我们可构造出动态规划方程
    step[i][j] = min{step[i][j-1]+a[i][j],step[i][j+1]+a[i][j],step[i-1][j-1]+a[i][j],step[i][j]+a[i][j]}
  2. 在程序实现的过程中一再的报错,提示stack overflow,昨天的青蛙过河是由于递归层次太多导致堆栈溢出,这个程序也没有10^9这么大的数据,递归也没有用到,问题最后归结到了开篇那个数组身上,一开始将其声明为局部变量,后来改为全局变量程序才得以通过。原来windows32位操作系统给程序的栈、堆分配的空间默认为1M。我开辟的数组为step[1000][1000],假设为int类型的话,step占空间为4*1000*1000Byte 大约是3M多一点。出现越界也是必然的了。关于这个问题将会细致的讨论一下。参见文章程序中关于堆栈的划定
    总结:在写程序的时候要有空间观念,大小超过1M的变量尽量定义为全局变量或者静态变量。


 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Websocket 1006错误是指Websocket连接异常终止的错误。它通常是由于以下原因之一导致的: 1. 网络连接中断导致Websocket连接丢失。 2. Websocket服务器出现故障或崩溃。 3. Websocket客户端或服务器端代码错误。 要解决此问题,可以尝试以下几种方法: 1. 检查网络连接是否正常,确保没有网络连接中断。 2. 检查Websocket服务器是否正常运行并且没有故障或崩溃。 3. 检查Websocket客户端或服务器端代码是否正确,并修复任何错误。 如果以上方法都无法解决问题,可以尝试使用其他Websocket库或工具进行连接,或者联系Websocket服务提供商以获得更多帮助。 ### 回答2: WebSocket协议中的状态码1006表示连接异常关闭。当WebSocket连接由于某种原因无法正常关闭时,就会出现这个状态码。 常见的导致WebSocket连接异常关闭的原因有以下几种: 1. 网络中断:当网络连接异常中断,例如断网或者网络不稳定时,WebSocket连接就会关闭,并且状态码为1006。 2. 服务器异常:如果WebSocket服务器发生故障或者出现异常,会导致连接异常关闭。 3. 客户端异常:当客户端应用或者浏览器出现异常,例如崩溃或者非正常关闭,也会导致WebSocket连接异常关闭。 4. TLS连接异常:当使用WebSocket over TLS(即wss://)进行连接时,如果TLS握手失败,就会导致连接异常关闭。 当出现WebSocket连接异常关闭时,通常可以通过以下步骤进行排查和解决: 1. 检查网络连接:确认客户端和服务器的网络连接正常,确保网络稳定。 2. 检查服务器状态:检查WebSocket服务器的运行状态,确认服务器没有发生异常。 3. 检查客户端应用:如果是客户端应用出现异常,尝试重新启动应用或者确保应用正常运行。 4. 检查TLS连接:如果使用wss://进行连接,确认TLS证书是否有效,并且抓取TLS连接握手过程的日志进行排查。 通过以上排查步骤,可以帮助定位WebSocket连接异常关闭的原因,并且采取相应的措施进行解决。 ### 回答3: websocket 1006错误表示连接关闭,原因是连接尝试失败或被服务器关闭。这个错误码在WebSocket协议中定义,并用于指示不可恢复的错误。以下是可能导致websocket 1006错误的情况: 1. 网络中断:当客户端或服务器之间的网络连接中断时,就会发生这个错误。这可能是由于网络问题、服务器故障、恶劣的网络连接或其他因素引起的。 2. 消息过大:如果WebSocket消息超出服务器或客户端的限制大小,连接可能会关闭,并返回1006错误。某些服务器和客户端可能限制WebSocket消息的大小。 3. 服务器关闭连接:服务器可能会在连接过程中关闭WebSocket连接,原因可能是服务器出错或意外终止。 4. SSL证书错误:如果使用了SSL加密连接,但证书出现问题,例如证书过期或不匹配,也可能导致WebSocket连接关闭并返回该错误。 解决WebSocket 1006错误的方法包括以下几个方面: 1. 检查网络连接:确保客户端和服务器之间的网络连接是稳定的,没有中断或延迟。可以尝试使用其他设备或网络进行连接来排除可能的网络问题。 2. 检查服务器配置:确保服务器设置正确,并且没有对连接进行限制,例如限制消息大小。查看服务器日志以获取更多详细信息。 3. 检查SSL证书:如果使用了SSL加密连接,请确保证书没有问题,例如过期或不匹配。可以尝试更新证书或使用有效的证书。 4. 使用适当的库和工具:使用适当的WebSocket库和工具可以减少出现错误的可能性。这些库和工具通常会处理WebSocket连接的实现细节,并提供更好的错误处理机制。 无论出现什么错误,重要的是要理解错误的原因,并通过适当的方式来解决和预防该错误的发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值