UVa1588 Kickdown(换抵挡装置)

本文介绍了一种算法,用于解决两个不同长度的长条如何最有效地放入一个固定高度的容器中。通过模拟插入过程,算法寻找最优的放置方式,以最小化容器的长度。

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

题目描述:

  给出两个长度分别为n1,n2且每列高度只为1或2的长条,需要将它们放入一个高度为3的容器,求出能够容纳他们的最短容器长度。

本题思路:

  模拟插入,从第一个接口开始插,如果不满足条件就跳到下一个接口,满足条件时跳出函数输出答案即可。

#include<bits/stdc++.h>
using namespace std;
int slo(char a[], char b[], int ha, int hb){
	int len = ha+hb, i, j;
	char temp[300];
	memset(temp, '\0', sizeof(temp));
	
	for(i = hb;i < hb+ha;i ++)temp[i] = a[i-hb];
	for(i = 0;i < ha+hb;i ++){
		for(j = 0;j < hb;j ++){
			if(temp[i+j]+b[j] > '1'+'2')goto end;
		}
		if(i < hb)len = ha+hb-i;
		else if(i >= hb && i < ha)len = ha;
		else if(i < len)len = i;
		end:;
	}
	return len;
}
int main(){
	char a[105], b[105];
	while(scanf("%s %s", a, b)==2){
		int ha = strlen(a), hb = strlen(b), len = 0;
		
		if(ha > hb)len = slo(a, b, ha, hb);
		else len = slo(b, a, hb, ha);
		
		printf("%d\n", len);
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值