UVA 11218

//刘汝佳的白皮书推荐习题暴力专题,这题倒是很水,但是刚开始弄了半天才理解题意,可能是数据给的有点混淆吧
//数据如下
/*
3
1 2 3 1
4 5 6 2
7 8 9 3
4
1 2 3 1
1 4 5 2
1 6 7 3
1 8 9 4
0
N个3人组合中,只要任选3个组成一个不重复的组合,即为全部组合,而N为4的那个数据所有3人组里面都有1,所以是无法组成9人组的。所以就是-1
*/
#include <stdio.h>
#include <string.h>
int a[100][4];
int v[100];
int max;
int N;
void dfs( int step, int num )
{
	if( step == 3 )
	{ 
		if( num > max )
			max = num;
		return;
	}
	for( int i = 0; i < N; i++ )
		if(  !v[a[i][0]] && !v[a[i][1]] && !v[a[i][2]] )
		{
			v[a[i][0]] = v[a[i][1]] = v[a[i][2]] = 1;
			dfs( step+1, num+a[i][3] );
			v[a[i][0]] = v[a[i][1]] = v[a[i][2]] = 0;
		}
}
int main()
{
	int p = 0;
	while( scanf( "%d", &N ) && N )
	{
		max = -1;
		memset( v, 0, sizeof(v) );
		for( int i = 0; i < N; i++ )
			scanf( "%d%d%d%d", &a[i][0], &a[i][1], &a[i][2], &a[i][3] );
				dfs( 0, 0 );
			printf("Case %d: %d\n", ++p, max );
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值