ZOJ 1694 Shredding Company(简单DFS)

37 篇文章 1 订阅
9 篇文章 0 订阅
#include <iostream>
#include <cstdio>
#include <memory.h>
#include <vector>
#include <limits.h>
using namespace std;

vector<int>v,stak;
vector<vector<int> >ans;
int tar,start,minv,ansSum;
void dfs(int curi,int sum){
	if(sum<=tar&&curi==v.size()){
		if(tar-sum<minv){
			ansSum=sum;
			minv=tar-sum;
			ans.clear();
			ans.push_back(stak);
		}else if(tar-sum==minv){
			ans.push_back(stak);
		}
	}
	if(sum>tar||curi>=v.size())return;
	int subSum=0;
	for (int i=curi;i<v.size();++i){
		subSum=subSum*10+v[i];
		stak.push_back(subSum);
		dfs(i+1,subSum+sum);
		stak.pop_back();
	}
}

int main(){
	while (scanf("%d%d",&tar,&start)){
		if(!tar&&!start)break;
		v.clear();
		while (start){
			v.insert(v.begin(),start%10);
			start/=10;
		}
		minv=INT_MAX;
		ansSum=INT_MAX;
		ans.clear();
		dfs(0,0);
		if(ans.size()==0){
			printf("error\n");
		}else if(ans.size()>1){
			printf("rejected\n");
		}else{
			printf("%d",ansSum);
			for (int j=0;j<ans[0].size();++j){
				printf(" %d",ans[0][j]);
			}
			printf("\n");
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值