现在的位置: 首页 > 综合 > 正文

UVA548

2018年04月05日 ⁄ 综合 ⁄ 共 598字 ⁄ 字号 评论关闭

直接递归得答案:

#include<stdio.h>
#include<stdlib.h>
#define Max 10000

int in[Max] = {0};
int po[Max] = {0};
int leaf = 0,sum = 0x7fffffff;
int e1,e2;

int dfs(int * s1,int * s2,int length,int ans){
	int i = 0;
	if(length){
		while(s2[length-1] != s1[i])i++;
		ans += s2[length-1];
		e1 = dfs(s1,s2,i,ans);
		e2 = dfs(s1+i+1,s2+i,length-i-1,ans);
			if(e1 && e2){
				if(sum >= ans){
					leaf = s2[length-1];
					sum = ans;
				}
			}
			return 0;
	}
	return 1;
}

int main(void){
	int num,i = 0,line = 0,len;
	char ch;
	while(scanf("%d%c",&num,&ch) != EOF){
		if(line == 0){
			in[i++] = num;
		}
		else if(line == 1){
			po[i++] = num;
		}
		if(ch == '\n'){
			line++;
			len = i;
			i = 0;
		}
		if(line == 2){
			sum = 0x7fffffff;
			dfs(in,po,len,0);
			printf("%d\n",leaf);
			line = 0;
		}
	}
	return 0;
}

 

抱歉!评论已关闭.