【ACM】Crixalis's Equipment

本文介绍了一种基于贪心算法的物品搬运问题解决方案。通过比较物品体积与移动所需空间,实现了合理安排物品搬运顺序的功能。该算法适用于所有物品移动空间不大于容积V的情况。

1

 

#include "stdio.h"
#include "stdlib.h"
/*  
贪心算法:   
Ai->x 表示第i个物品的体积
Ai->y 表示第i个物品移动所需要的空间大小
前提:所有物品的移动空间都不大于容积V  
Ai->x  +  A(i+1)->y 表示先移动第一个物品 再移动第二个物品所需要的瞬时最大空间大小  
for example :
V = 10 
 x   y
 2   10
 8   5
 
 2+5 < 8+10 所以第一个物品先搬动  
 
*/

typedef struct stuff {
	int x;
	int y;
}stuff;
int cmp( const void * a, const void *b ) {
	int t;
	stuff * x = (stuff *) a;
	stuff * y = (stuff *) b;
	if( x->x != y->x ) {
		t = ( ( x->x + y->y ) > ( y->x + x->y ) ? 1 : -1);    
	}
	else {
		t = ( x->y < y->y ? 1 : -1 );
	}
	
	return t;
}

int main(int argc, char* argv[])
{

	int t;
	int v,n;
	stuff e[1000];
	int i;
	int flag;
	while( scanf( "%d" , &t ) != EOF ) {
		while( t-- ) {
				flag = 0;
			scanf( "%d%d", &v , &n);
			for( i = 0 ; i < n ; i++ ) {
				scanf( "%d %d" , &e[i].x , &e[i].y ) ;
			}
			qsort(e,n,sizeof(e[0]),cmp);
			for( i = 0 ; i < n ; i++ ) {
				if( v >= e[i].x  && v >= e[i].y) {
					v-=e[i].x;
				}
				else {
					flag = 1 ; break;
				}
			}
			if( flag == 0 ) printf( "Yes\n" ); else printf ( "No\n" );	
		}
	
	}
	return 0;
}

转载于:https://www.cnblogs.com/hInstance/p/3464255.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值