您的位置:首页 > 其它

UVa系列——102/Ecological Bin Packing

2012-04-01 22:53 302 查看

引用请注明出处:/article/8833308.html

简单的枚举题,没什么好说的,注意一点就是题目给的颜色顺序是BGC,而如果按照字典序最小优先的话访问要按BCG访问,所以用了三个SWAP。额外说明一点,这里为了使代码紧凑,用了很多宏,而且出现了do{……}while(0)这样的结构,这样定义的优点是很明显的,可以定义一个宏实现多条语句而不至于冲突,说白了可以把宏看做函数来用,当然,宏的优点是直接展开减少了函数调用花费的时间和栈的耗费。

#include  <stdio.h>
#include  <stdlib.h>

#define  PRINT(color) putchar(color==0?'B':(color==1?'C':'G'))
#define  PRINT_COLOR(x, y, z) do{ PRINT(x);PRINT(y);PRINT(z);}while(0)
#define  SUM_BINS(i, j) (bins[i] + bins[j+3] + bins[9-i-j])
#define  SWAP(i, j) do{int tmp=bins[i]; bins[i]=bins[j]; bins[j]=tmp;}while(0)

int main(int argc, char *argv[])
{
int bins[9];
while(scanf("%d",&bins[0]) != EOF){
int i, pi,j, pj, sum = bins[0], mmax = -1;
for(i = 1; i != 9; ++i){
scanf("%d", &bins[i]);
sum += bins[i];
}
SWAP(1, 2);SWAP(4, 5);SWAP(7, 8);
for(i = 0; i != 3; ++i)
for(j = 0; j != 3; ++j){
if(i == j)continue;
if(mmax < SUM_BINS(i, j)){
mmax =SUM_BINS(i, j);
pi = i; pj = j;
}
}
PRINT_COLOR(pi,pj,3-pi-pj);
printf(" %d\n",sum - mmax);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: