LA 4256 salesman 商人

本文介绍了一种结合图论和动态规划解决特定问题的方法。通过构建无向连通图,利用邻接矩阵表示节点间关系,并运用动态规划算法求解最小修改数。适用于节点数量较少的情况,提供了一个详细的实现代码示例。

题目大意
给定一个包含n个点的无向连通图和一个长度为L的序列A,要求修改尽量少的数,使得序列中的任意两个相邻数或者相同,或者对应图中两个相邻节点.
分析
因为给定的节点N《100,所以我们把其纳入动态规划的状态当中去
用一个邻接矩阵g表示两个点之间的联通关系,并且重要的一点,我们把自身与自身连通设为1,即g(i,i)=1;方便我们状态转移;我们设d(i,j)表示前i个数以第j个结尾的最小修改数,这样的话状态转移方程为: d(i,j)=min{d(i-1,k)|g(k,j)连通}
代码如下

#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
#define maxn 200+10
#define inf  0x3f3f3f3f			//设为无穷大;
using namespace std;

int q[maxn],f[maxn][maxn],g[maxn][maxn];
int m,n;

int main()
{
	int t;
	cin >> t;
	while (t--) {
		cin >> m >> n;
		int u, v;
		memset(g, 0, sizeof(g));
		for (int i = 0; i < n; i++) {
			cin >> u >> v;
			g[u][v] = g[v][u] = 1;
		}
		cin >> n;
		for (int i = 1; i <= n; i++)
				cin >> q[i];
		for (int i = 2; i <= n; i++)
			for (int j = 1; j <= m; j++)
				f[i][j] = inf;
		for (int j = 1; j <= m; j++)
			f[1][j] = (j != q[1]);				//如果第一个数与修改后的值不同,修改数量加1
		for (int i = 2; i <= n; i++) {
				for(int j=1;j<=m;j++)
					for(int k=1;k<=m;k++)
						if (j == k || g[j][k]) {
							f[i][j] = min(f[i][j], f[i - 1][k] + (j != q[i]));				//如果修改后的值与未修改前的值不同,加修改数量加1,
						}
		}
		int ans = f[n][1];
		for (int j = 1; j <=m; j++) {
			ans = min(ans, f[n][j]);
		}
		printf("%d\n", ans);
	}
	return 0;
}
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
<think>好的,我现在需要帮用户解决如何用SQL查询job为MANAGER或SALESMAN的员工。首先,用户提到了之前的问题,关于使用BETWEENAND查询工资范围,现在转向筛选特定职位。用户提供的引用中有几个例子,比如引用[1]里的distinct deptno和job,还有引用[3]中的row_number窗口函数。不过当前的问题更基础,是关于筛选特定job的员工,所以可能需要用到WHERE子句和IN或者OR条件。 首先,用户可能知道基本的WHERE job= 'MANAGER'OR job= 'SALESMAN',但可能想了解更高效的方法,比如使用IN运算符。需要比较两种方法的区别,比如可读性和性能。然后,引用[2]中的GROUPBY和HAVING可能不直接相关,但可以提如果用户需要统计这些职位的部门情况,可能需要结合GROUPBY。不过当前问题主要是筛选记录,不是聚合。另外,引用[3]中的窗口函数可能用于后续的排序,但当前查询不需要。不过可以建议用户如果需要按部门或其他条件排序,可以添加ORDERBY。需要确保字段名正确,比如job是否是字符串类型,值是否全大写,如MANAGER和SALESMAN是否需要引号。在SQL中,字符串必须用引号括起来,所以WHEREjobIN ('MANAGER','SALESMAN')是正确的。 还要考虑用户是否有其他需求,比如是否需要去重,或者是否需要连接其他表。根据用户之前的问题,可能不需要,但可以提到如果有其他需求可以扩展。最后,生成相关问题,可能涉及性能优化、处理大小写敏感、排除特定职位等。确保问题与当前主题相关,帮助用户深入学习。</think>### 使用SQL查询特定岗位员工的实现方法 要查询`emp`表中岗位为`MANAGER`或`SALESMAN`的员工信息,可采用以下两种常用方法: #### 方法一:使用`IN`运算符 ```sql SELECT empno, ename, job, sal FROM emp WHERE job IN ('MANAGER', 'SALESMAN'); -- 精确匹配指定岗位[^1] ``` #### 方法二:逻辑运算符组合 ```sql SELECT empno, ename, job, sal FROM emp WHERE job = 'MANAGER' OR job = 'SALESMAN'; -- 逻辑条件组合[^1] ``` #### 扩展用法示例 ```sql -- 包含部门信息的多表查询 SELECT e.empno, e.ename, e.job, d.dname FROM emp e JOIN dept d ON e.deptno = d.deptno WHERE e.job IN ('MANAGER', 'SALESMAN') ORDER BY d.dname, e.sal DESC; -- 按部门排序并显示工资[^3] ``` #### 关键对比分析 | 方法 | 优点 | 适用场景 | |-----------------|-----------------------|--------------------------| | `IN`运算符 | 代码简洁,可读性强 | 筛选值较多时更高效 | | `OR`逻辑组合 | 条件灵活,可扩展性高 | 需要与其他条件联合使用时 | ### 进阶应用场景 #### 结合聚合函数统计 ```sql SELECT job, COUNT(*) AS total, AVG(sal) AS avg_salary FROM emp WHERE job IN ('MANAGER', 'SALESMAN') GROUP BY job; -- 分组统计岗位信息[^2] ``` #### 排除特定部门 ```sql SELECT ename, job, deptno FROM emp WHERE job IN ('MANAGER', 'SALESMAN') AND deptno NOT IN (10); -- 排除部门编号10的数据[^1] ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值