HDU 1950 Bridging signals ( 枚举+DFS O(n2^n) )

#include <stdio.h>
#define MAX_POARTS 40000

int numOfTests;
int numOfPorts;
int arrayOfPorts[MAX_POARTS + 1];
//connected[index]表示端口arrayOfPorts[index]已经连接上
int connected[MAX_POARTS + 1];
int result;

//get length of increasing subsequence
int getLenOfIncrSubs(){
	int lenOfIncrSubs = 0;
	int prePort = 0;
	int indexOfPort;
	for (indexOfPort = 1; indexOfPort <= numOfPorts; indexOfPort++){
		if (connected[indexOfPort] == 1)
			if (arrayOfPorts[indexOfPort] < prePort)
				return 1;
			else {
				lenOfIncrSubs++;
				prePort = arrayOfPorts[indexOfPort];
			}
	}
	return lenOfIncrSubs;
}

void connectOrNot(int indexOfPort){
	if (indexOfPort > numOfPorts){
		int lenOfIncrSubs = getLenOfIncrSubs();
		if (lenOfIncrSubs > result)
			result = lenOfIncrSubs;
		return;
	}
	connected[indexOfPort] = 1;
	connectOrNot(indexOfPort + 1);
	connected[indexOfPort] = 0;
	connectOrNot(indexOfPort + 1);
}

int main(){
	scanf("%d", &numOfTests);
	int test;
	for (test = 1; test <= numOfTests; test++){
		scanf("%d", &numOfPorts);
		int indexOfPort;
		for (indexOfPort = 1; indexOfPort <= numOfPorts; indexOfPort++)
			scanf("%d", &arrayOfPorts[indexOfPort]);
		
		result = 1;
		connectOrNot(1);

		printf("%d\n", result);
	}

	return 0;
}

你可能感兴趣的:(枚举,HDU,LIS,Signals,Bridging,1950)