poj3211(Washing Clothes + 0/1背包)

衣物清洗优化算法
这篇博客介绍了Dearboy夫妇清洗不同颜色衣服的优化算法,通过合理安排清洗顺序,减少整体清洗时间。算法通过计算每种颜色衣服的清洗总时间,并利用背包问题解决策略,找到最优清洗方案。

       题目链接:http://poj.org/problem?id=3211

       题意:Dearboy夫妇有一桶衣服要清洗,由于衣服颜色不同,质量也不太好,为了防止不同颜色的衣服混合清洗造成染色,所以Dearboy夫妇只能在清洗完一种颜色的衣服后再清洗另一种颜色的衣服(注意理解:如果Dearboy的老婆已经把蓝色衣服洗好了,但Dearboy洗的那一件蓝色衣服还没有清洗好,Dearboy的老婆只能等着,等Dearboy把他洗的蓝色衣服洗好了,才能一起再去洗黄色的衣服)。现有M种颜色的衣服N件,每件衣服的清洗需要的时间和颜色题目告知,问Dearboy夫妇至少需要多少时间能把衣服清洗干净。

      思路:由于Dearboy夫妇只能在清洗完一种颜色的衣服后才能清洗另一种颜色的衣服,所以就要求Dearboy夫妇再清洗一种颜色的衣服时花的时间尽可能的相同。假设清洗一种颜色的衣服需要的额总时间为sumtime,将sumtime/2的背包尽可能的装满,清洗该种衣服所需要的时间则为sumtime-dp[sumtime/2](以时间长的一个为准);

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXM 15
#define MAXN 105
int M,N,ans;
char color[MAXM][11];
int dp[50005];
struct Close{
	int time;
	char col[11];
	int used;
}close[MAXN];
int max(int a,int b)
{
	return a>b ? a : b ;
}
int main()
{
   int i,j;
   while(scanf("%d%d",&M,&N) && (M!=0&&N!=0))
   {
	   ans =0;
	   for(i=0;i<M;i++)
		   scanf("%s",color[i]);
	   for(i=0;i<N;i++)
	   {
		   scanf("%d %s",&close[i].time,&close[i].col);
		   close[i].used=0;
	   }
	   int temp[105];
	   for(i=0;i<M;i++)//一种颜色一种颜色的清洗
	   {
		   int num=0;
		   int sumtime=0;
		   for(j=0;j<N;j++)//求出一种颜色的衣服总共要花费多少时间清洗(sumtime)
		   {
			   if(close[j].used)
				   continue;
			   if(strcmp(color[i],close[j].col) == 0)
			   {
				   temp[num++]=close[j].time;
				   sumtime += close[j].time;
				   close[j].used = 1;
			   }
		   }
		   for(int l=0;l<=sumtime/2;l++)
			   dp[l]=0;
		   for(int k=0;k<num;k++)//背包sumtime/2最大装满
			   for(int v=sumtime/2;v>=temp[k];v--)
			   {
				   dp[v] = max(dp[v],dp[v-temp[k]]+temp[k]);
			   }
			ans += sumtime - dp[sumtime/2];//清洗一种颜色衣服需要花费的时间
	   }
	   printf("%d\n",ans);
   }
   return 0;
}


 

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器的建模与仿真展开,重点介绍了基于Matlab的飞行器动力学模型构建与控制系统设计方法。通过对四轴飞行器非线性运动方程的推导,建立其在三维空间中的姿态与位置动态模型,并采用数值仿真手段实现飞行器在复杂环境下的行为模拟。文中详细阐述了系统状态方程的构建、控制输入设计以及仿真参数设置,并结合具体代码实现展示了如何对飞行器进行稳定控制与轨迹跟踪。此外,文章还提到了多种优化与控制策略的应用背景,如模型预测控制、PID控制等,突出了Matlab工具在无人机系统仿真中的强大功能。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程师;尤其适合从事飞行器建模、控制算法研究及相关领域研究的专业人士。; 使用场景及目标:①用于四轴飞行器非线性动力学建模的教学与科研实践;②为无人机控制系统设计(如姿态控制、轨迹跟踪)提供仿真验证平台;③支持高级控制算法(如MPC、LQR、PID)的研究与对比分析; 阅读建议:建议读者结合文中提到的Matlab代码与仿真模型,动手实践飞行器建模与控制流程,重点关注动力学方程的实现与控制器参数调优,同时可拓展至多自由度或复杂环境下的飞行仿真研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值