洛谷 P5027 Barracuda 题解

题目传送门

题目大意: n n n 个物品,称量 n + 1 n+1 n+1 次,每次选取其中若干个,但是有一次的称量得到的质量是错误的,求出最重的物品的编号。

题解

因为 n n n 只有 100 100 100,所以愉快的考虑 O ( n 4 ) O(n^4) O(n4) 做法。

显然,直接枚举哪一次称量是错误的,然后高斯消元直接搞即可。

代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxn 110

int n;
double matrix[maxn][maxn];
double ans[maxn];
int shuru[maxn][maxn],w[maxn];
void gauss()//高斯消元 
{
	for(int i=1;i<=n;i++)
	{
		int p=i;
		for(int j=i+1;j<=n;j++)
		if(fabs(matrix[j][i])>fabs(matrix[p][i]))p=j;
		if(p!=i)swap(matrix[p],matrix[i]);
		
		for(int j=n+1;j>=i;j--)
		matrix[i][j]/=matrix[i][i];
		
		for(int j=i+1;j<=n;j++)
		for(int k=n+1;k>=i;k--)
		matrix[j][k]-=matrix[i][k]*matrix[j][i];
	}
	ans[n]=matrix[n][n+1];
	for(int i=n-1;i>=1;i--)
	{
		ans[i]=matrix[i][n+1];
		for(int j=i+1;j<=n;j++)
		ans[i]-=matrix[i][j]*ans[j];
	}
}
int anss=-1;
void check()
{
	int v=0;//如果某一行全部为0,就是无解或无数解 
	for(int i=1;i<=n;i++)
	{
		bool tf=false;
		for(int j=1;j<=n;j++)
		if(fabs(matrix[i][j])>1e-10){tf=true;break;}
		if(!tf){v=1;break;}
	}
	if(v)return;
	
	int maxans=0;//判断是否都是正整数 
	for(int i=1;i<=n;i++)
	if(fabs((int)ans[i]-ans[i])>1e-10||ans[i]<=0)return;
	for(int i=1;i<=n;i++)
	if((int)ans[i]>maxans)maxans=(int)ans[i];
	int sum=0;
	for(int i=1;i<=n;i++)
	if((int)ans[i]==maxans)sum++,v=i;
	if(sum>1)return;//判断是否只有一个最重物品
	
	if(anss!=-1)printf("illegal"),exit(0);//判断是否有多组合法方案
	anss=v;
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n+1;i++)
	{
		scanf("%d",&shuru[i][0]);
		for(int j=1;j<=shuru[i][0];j++)
		scanf("%d",&shuru[i][j]);
		scanf("%d",&w[i]);
	}
	for(int i=1;i<=n+1;i++)
	{
		int tot=0;
		memset(matrix,0,sizeof(matrix));
		for(int j=1;j<=n+1;j++)
		{
			if(j==i)continue;
			tot++;
			for(int k=1;k<=shuru[j][0];k++)
			matrix[tot][shuru[j][k]]=1;
			matrix[tot][n+1]=w[j];
		}
		gauss();
		check();
	}
	if(anss==-1)printf("illegal");
	else printf("%d",anss);
}
主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文中强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值