LCIS类模板

本文介绍了一个模板类LCIS,用于求解两个序列的最长递增公共子序列(Longest Common Increasing Subsequence, LCIS)。该算法通过动态规划方法实现了对两个序列的比较,并记录了形成LCIS的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

template<class T>
class LCIS
{
private:
	static const short maxLength = 501;				//序列的最大长度
	unsigned short length1,length2;					//分别表示seq1,seq2的长度
	T seq1[maxLength],seq2[maxLength];				//源序列
	unsigned short dp[maxLength][maxLength];		//dp[i][j]表示子串seq1[1,2,...i]和以seq2[j]结尾的子串seq2[1,2,...j]的LCIS
	unsigned short lastindex;						//LCIS的seq2的结尾下标,即若最后的LCIS串为seq = {s1,s2,...st},那么seq[st] = seq2[lastindex]
	short path[maxLength][maxLength];				//路径记录,path[i][j] = y表示(i - 1,y) -> (i,y)

	void copyArray(T num1[],int& l1,T num2[],int l2);

public:
	LCIS(){};
	LCIS(T num1[],int l1,T num2[],int l2);
	void init(T num1[],int l1,T num2[],int l2);
	int getLCIS();									//计算LCIS,path并返回LCSI的值
	int getLastindex();								//返回组成LCIS串的seq2串的结尾下标
	void printPath(int x,int y);					//打印路径,注意,入口处的参数y必须是LCIS的相应结尾lastindex
};

template<class T>
void LCIS<T>::copyArray(T num1[],int& l1,T num2[],int l2)
{
	l1 = l2;
	for(int i = 1;i <= l1;i++)
		num1[i] = num2[i];
}

template<class T>
LCIS<T>::LCIS(T num1[],int l1,T num2[],int l2)
{
	init(num1,l1,num2,l2);
}

template<class T>
void LCIS<T>::init(T num1[],int l1,T num2[],int l2)
{
	copyArray(seq1,length1,num1,l1);
	copyArray(seq2,length2,num2,l2);
	memset(dp,0,sizeof(dp));
	memset(path,0,sizeof(path));
}

template<class T>
int LCIS<T>::getLCIS()
{
	for(int i = 1;i <= length1;i++)
	{
		int maxj = 0;
		for(int j = 1;j <= length2;j++)
		{
			if(seq1[i] > seq2[j] && dp[i - 1][maxj] < dp[i - 1][j])
				maxj = j;
			if(seq1[i] != seq2[j])
			{
				dp[i][j] = dp[i - 1][j];
				path[i][j] = j;
			}
			else if(seq1[i] == seq2[j])
			{
				dp[i][j] = dp[i - 1][maxj] + 1;
				path[i][j] = maxj;
			}
		}
	}
	lastindex = 1;
	for(int i = 1;i <= length2;i++)
		if(dp[length1][lastindex] < dp[length1][i])
			lastindex = i;
	return dp[length1][lastindex];
}

template<class T>
int LCIS<T>::getLastindex()
{
	return lastindex;
}

template<class T>
void LCIS<T>::printPath(int x,int y)
{
	if(x < 1 || y < 1)
		return;
	while(x >= 1 && path[x][y] == y)
		x--;
	if(x >= 1)
	{
		printPath(x,path[x][y]);
		if(!path[x][y])
			printf("%d",seq2[y]);
		else
			printf(" %d",seq2[y]);
	}
}

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值