码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1950

时间:2015-02-13 23:41:09      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:

直接DFS,因为实在没想到什么剪枝了...

注意一点是,10.11使用的是1011哦

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define LL __int64
using namespace std;
int n,ct,k;
char str[20];

void dfs(LL sum,LL last,int pos){
	if(pos==n+1){
		if(sum==0){
			ct++;
			if(ct<=20){
				for(int i=1;i<n;i++){
					printf("%d %c ",i,str[i]);
				}
				printf("%d\n",n);
			}
		}
		return ;
	}
	str[pos-1]=‘+‘;
	dfs(sum+pos,pos,pos+1);
	str[pos-1]=‘-‘;
	dfs(sum-pos,-pos,pos+1);
	str[pos-1]=‘.‘;
	if(pos>=10){
		k=100;
	}
	else k=10;
	if(last<0)
	dfs(sum-last+last*k-pos,last*k-pos,pos+1);
	else if(last>0){
		dfs(sum-last+last*k+pos,last*k+pos,pos+1);
	}
}

int main(){
	while(scanf("%d",&n)!=EOF){
		ct=0;
		dfs(1,1,2);   //sum,last,pos,char
		printf("%d\n",ct);
	}
	return 0;
}

  

POJ 1950

标签:

原文地址:http://www.cnblogs.com/jie-dcai/p/4290998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!