POJ 1837 Balance DP

POJ:http://poj.org/problem?id=1837

下午看完某萌妹子的比赛后回来继续刷题,太困了想不出来T T,小睡一觉还是想不出来QAQ,搜了题解做出来了,Orz大牛。

大意:

给出天平的钩码和挂钩位置,你需要的是计算出使天平达到平衡总的方法数。


补充知识:天平的话距离平衡点的长度*钩码的重量(表达不好大概就是这样)

然后设dp(i,j)为达到状态j的方法数,那么一开始不挂钩码就可以平衡,初始状态为1.

可以得到状态转移方程:dp[i][j+c[k]*g[i]+7500] += dp[i-1][j+7500];

代码上有详细注释,吃饭去~

#include<cstdio>
#include<cstring>
const int MAXN=150000+1;
int dp[21][MAXN];     //设dp(i,j)为达到状态j的方法数
int c[21],g[21];
int main()
{
	int C,G;
	scanf("%d%d",&C,&G);

	for(int i=1;i<=C;i++)
		scanf("%d",&c[i]);
	for(int i=1;i<=G;i++)
		scanf("%d",&g[i]);

	dp[0][7500]=1;     //设7500为天枰达到平衡状态时的平衡度  
					   //一开始不放钩码就可以达到平衡,所以为1
	for(int i=1;i<=G;i++)
	{
		for(int j=-7500; j<=7500;j++)
		{		
			if(dp[i-1][j+7500])     //优化,前面没出现过,那么跳过
				for(int k=1;k <= C; k++)
				{
					dp[i][j+c[k]*g[i]+7500] += dp[i-1][j+7500];
				}	
		}
	}
	printf("%d\n",dp[G][7500]);    //根据上面的步奏,全部取完钩码后达到平衡点即为答案
	return 0;
}


内容概要:本文档提供了三种神经网络控制器(NNPC、MRC和NARMA-L2)在机器人手臂模型上性能比较的MATLAB实现代码及详细解释。首先初始化工作空间并设定仿真参数,包括仿真时间和采样时间等。接着定义了机器人手臂的二阶动力学模型参数,并将其转换为离散时间系统。对于参考信号,可以选择方波或正弦波形式。然后分别实现了三种控制器的具体算法:MRC通过定义参考模型参数并训练神经网络来实现控制;NNPC利用预测模型神经网络并结合优化算法求解控制序列;NARMA-L2则通过两个神经网络分别建模f和g函数,进而实现控制律。最后,对三种控制器进行了性能比较,包括计算均方根误差、最大误差、调节时间等指标,并绘制了响应曲线和跟踪误差曲线。此外,还强调了机器人手臂模型参数的一致性和参考信号设置的规范性,提出了常见问题的解决方案以及性能比较的标准化方法。 适合人群:具备一定编程基础,特别是熟悉MATLAB编程语言的研究人员或工程师,以及对神经网络控制理论有一定了解的技术人员。 使用场景及目标:①理解不同类型的神经网络控制器的工作原理;②掌握在MATLAB中实现这些控制器的方法;③学会如何设置合理的参考信号并保证模型参数的一致性;④能够根据具体的性能指标对比不同控制器的效果,从而选择最适合应用场景的控制器。 其他说明:本文档不仅提供了完整的实验代码,还对每个步骤进行了详细的注释,有助于读者更好地理解每段代码的功能。同时,针对可能出现的问题给出了相应的解决办法,确保实验结果的有效性和可靠性。为了使性能比较更加公平合理,文档还介绍了标准化的测试流程和评估标准,这对于进一步研究和应用具有重要的指导意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值