入门DP专练

   这周集训队对大一新生(好吧。马上大二了,要当学长了,可是学的不行,,长得也不行哎)的入门算法是DP,其实在此之前也做过一些动态规划方面的题目,但是DP类的题目真的是变化多,想要掌握还真是不行,更别说应用自如了,曾经Baka哥(wode超级偶像奥害羞)就说要多多做题,见得种类多了,也就慢慢的有感觉了,我现在别说有感觉,除了明显的背包问题外,基本根本没法看出这是要用DP.可是快要期末考试了,集训还是并没有一点点停歇,看的出来学校对我们这届重视了,这是个好消息,不希望学校的ACM一直这么弱。这周周末就要4级了,也不知裸考的我能不能过,算了,走一步算一步了。

学动规的时候有这么一句话,现在摘抄下:如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出以求的答案,这样可以避免不必要的大量重复,此时需要考虑动规。

HDU 1058 Humble Numbers

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058

题意:是说如果一个数的素因子只有2,3,5,7,则被称为humber numbers。计算第n个humble number(一下简称HN)。这道题还有一个对第几的表示,主要考虑特殊考虑1,2,3,11,12,13及余数为1,2,3的数即可。

可以这么考虑,当一个数为HN时,他的倍数也为HN。

状态转移方程:dp[i]=min(dp[a2]*2,dp[a3]*3,dp[a5]*5,dp[a7]*7).由于要按照顺序,所以方程要保证位置是目前状态最小的。同时要避免重复,在打表时还的注意下。

代码:

#include <stdio.h>
#include <algorithm>
using std::min;

int dp[5845];//dp[i]表示第i个数
char word[3][3]={"st","nd","rd"};

void judge()
{
	int a2,a3,a5,a7;
	dp[1]=1;
	a2=a3=a5=a7=1;

	int temp,i=2;
	while(i<5845)
	{
		temp=min(min(dp[a2]*2,dp[a3]*3),min(dp[a5]*5,dp[a7]*7));

		if(temp==dp[a2]*2)
			a2++;
		else if(temp==dp[a3]*3)
			a3++;
		else if(temp==dp[a5]*5)
			a5++;
		else if(temp==dp[a7]*7)
			a7++;
		if(temp>dp[i-1])//防止重复
		{
			dp[i]=temp;
		    i++;
		}
	}
}

int main()
{
	//freopen("in.txt","r",stdin);
	int n;
	judge();
	while(scanf("%d",&n)!=EOF)
	{
		if(n==0)
			break;
		printf("The %d",n);

		if(n%100==11||n%100==12||n%100==13)
		printf("th humble number is %d.\n",dp[n]);
		else if(n%10==1||n%10==2||n%10==3)
			printf("%s humble number is %d.\n",word[n%10-1],dp[n]);
		else 
			printf("th humble number is %d.\n",dp[n]);
	}
	return 0;
}




HDU 1087 Super Jumping!Jumping!Jumping!

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087

分析:求最长上升子序列,如果要跳到下一个位置的话,下一个数必须比当前的数大。要求从前往后跳,则状态转移方程:dp[i]=max[dp[i],dp[j]+a[i]);要求a[i]>a[j]&&j<i ,同时要注意初始化(dp[i]=a[i])。

代码:

#include<stdio.h>
int main()
{
	int a[1000],dp[1000],i,n,j,max;
	while(scanf("%d",&n)!=EOF)
	{
		if(n==0)
			break;
		for(i=0;i<n;i++)
		{
			scanf("%d",a+i);
			dp[i]=a[i];
		}
		max=0;
		for(i=0;i<n;i++)
		{
			for(j=0;j<i;j++)
				if(a[j]<a[i])
				{
					if(dp[j]+a[i]>dp[i])
						dp[i]=dp[j]+a[i];
				}
		  if(dp[i]>max)
			max=dp[i];
		}
		printf("%d\n",max);
	}
	return 0;
}	


 


 

 

基于html+python+Apriori 算法、SVD(奇异值分解)的电影推荐算法+源码+项目文档+算法解析+数据集,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 电影推荐算法:Apriori 算法、SVD(奇异值分解)推荐算法 电影、用户可视化 电影、用户管理 数据统计 SVD 推荐 根据电影打分进行推荐 使用 svd 模型计算用户对未评分的电影打分,返回前 n 个打分最高的电影作为推荐结果 n = 30 for now 使用相似电影进行推荐 根据用户最喜欢的前 K 部电影,分别计算这 K 部电影的相似电影 n 部,返回 K*n 部电影进行推荐 K = 10 and n = 5 for now 根据相似用户进行推荐 获取相似用户 K 个,分别取这 K 个用户的最喜爱电影 n 部,返回 K*n 部电影进行推荐 K = 10 and n = 5 for now Redis 使用 Redis 做页面访问次数统计 缓存相似电影 在使用相似电影推荐的方式时,每次请求大概需要 6.6s(需要遍历计算与所有电影的相似度)。 将相似电影存储至 redis 中(仅存储 movie_id,拿到 movie_id 后还是从 mysql 中获取电影详细信息), 时间缩短至:93ms。 十部电影,每部存 top 5 similar movie 登录了 1-6 user并使用了推荐系统,redis 中新增了 50 部电影的 similar movie,也就是说,系统只为 6 为用户计算了共 60 部电影的相似度,其中就有10 部重复电影。 热点电影重复度还是比较高的
<think>嗯,用户想快速入门PLC,那我得先理清楚PLC的基础知识。首先得解释PLC是什么,它的应用领域,这样用户能明白为什么需要学习。然后需要分步骤讲如何入门,比如学习基础概念、编程语言、选型之类的。 可能用户是刚接触工业自动化,或者想转行做电气工程师,所以内容不能太深奥,要由浅入深。需要涵盖硬件组成、编程语言,比如梯形图,这是最常用的。还要提到实践的重要性,比如用仿真软件或购买设备实操。 另外,用户可能想了解学习资源,比如书籍或在线课程,这部分也要推荐一些经典的资料。还有注意事项,比如安全规范,避免操作真实设备时的风险。需要结构清晰,分点说明,让用户一步步来,不会感到混乱。 需要检查有没有遗漏的重要知识点,比如PLC的工作流程、通信功能,这些对实际应用很重要。同时要确保提到的编程软件和仿真工具是常用的,比如西门子的TIA Portal或者三菱的GX Works,这样用户能找到资源习。 最后要鼓励用户多实践,结合项目学习,这样才能巩固知识。可能用户时间有限,所以快速入门的关键点要突出,比如先掌握梯形图和基础指令,再逐步深入。还要注意避免技术术语过多,用易懂的中文解释,确保内容准确无误。</think>以下是为您整理的PLC快速入门指南,采用分步式结构帮助您系统掌握基础知识: 一、PLC基础认知(理论准备) 1. 核心定义 $$ PLC = Programmable\ Logic\ Controller $$ 工业计算机,为自动化控制设计,替代传统继电器电路 2. 典型应用场景 - 生产线自动化(汽车装配、食品包装) - 智能楼宇控制(电梯、空调系统) - 能源管理系统(电厂、石油管道) 3. 硬件架构解析 ```plaintext CPU模块 —— 系统大脑(执行程序) I/O模块 —— 信号转换器(DI/AI输入,DO/AO输出) 电源模块 —— 能量供给 通信模块 —— 设备联网(Profibus, Ethernet/IP) ``` 二、快速上手四步法(实践路径) 1. 开发环境搭建 - 推荐软件:TIA Portal(西门子)、GX Works(三菱) - 仿真工具:PLCSIM(配合S7-1200/1500习) 2. 梯形图(Ladder Diagram)速成 ```ladder |--[ ]--[ ]--( )--| 基本逻辑电路 |--[ ]--|/|--( )--| 非门控制 |--[TON]--------| 定时器应用 ``` 3. 基础指令集(以西门子S7系列为例) - 位逻辑:$I0.0 \land Q0.1 \rightarrow M0.2$ - 定时器:$TON(T37, PT=100ms)$ - 计数器:$CTU(C10, PV=50)$ 4. 典型编程模式实践 ```structured-text OB1(主循环) ├─ FC1 电机启停控制 ├─ FC2 温度PID调节 └─ FB1 传送带联动 ``` 三、进阶学习路线图 1. 通信协议掌握 - 现场总线:Profibus DP > Modbus RTU > CANopen - 工业以太网:Profinet ≈ EtherCAT > Ethernet/IP 2. 安全规范(符合IEC 61131-3) - 紧急停止电路设计:$ESTOP \Rightarrow 双通道冗余$ - 安全PLC认证:SIL2/SIL3等级要求 3. 行业解决方案分析 ```mermaid graph LR 汽车焊装-->伺服精确定位 制药灌装-->卫生型I/O模块 光伏生产-->高速计数模块 ``` 四、推荐学习资源 1. 经典教材: - 《PLC编程及应用》廖常初著(第5版) - 《TIA Portal完全精通》向晓汉编著 2. 实践平台: - 西门子S7-1200 Starter Kit(含HMI) - 三菱FX5U-32MT实训套件 3. 在线资源: - PLC Academy(英文视频教程) - 中国工控网技术论坛 注意事项: 1. 实验阶段建议使用24V DC设备,避免高压危险 2. 重要参数修改前务必备份程序 3. 工业现场调试需持电工证操作 建议学习进度: ```gantt 第1周:硬件认知+基础指令 第2周:梯形图编程习 第3周:HMI联动开发 第4周:完整项目模拟(推荐物料分拣系统) ``` 通过上述结构化学习路径,配合每周15小时的实践训,可快速达到初级PLC工程师水平。重点在于理解扫描周期(Scan Cycle)工作机制: $$ T_{cycle} = \sum (输入处理 + 程序执行 + 输出更新) $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值