UVA 598 - Bundling Newspapers

9 篇文章 0 订阅

简单回溯,小心输入输出格式.

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <memory.h>
using namespace std;
#define MAX 40
char buf[MAX];
char npName[MAX][MAX];
int curSize,n;//当前要显示的子集大小
vector<int>stak;
void backtracking(int curi){
	if(curSize==stak.size()){
		for (int i=0;i<stak.size();++i)
		{
			if(i>0)printf(", ");
			printf("%s",npName[stak[i]]);
		}
		printf("\n");
		return;
	}else if(curi>=n)return;
	stak.push_back(curi);
	backtracking(curi+1);
	stak.pop_back();
	backtracking(curi+1);
}
int main(){
	int t;
	scanf("%d\n\n",&t);
	while (t--)
	{
		int r1=-1,r2=-1;
		n=0;
		curSize=0;
		gets(buf);
		if(buf[0]=='*'){
			curSize=-1;
		}else{
			sscanf(buf,"%d %d",&r1,&r2);
			if(r2==-1)r2=r1;
		}

		//读入数据
		while (gets(npName[n])&&strcmp(npName[n],""))n++;
		if(curSize==-1){
			//所有的大小
			r1=1,r2=n;
		}
		for (int i=r1;i<=r2;++i)
		{
			curSize=i;
			printf("Size %d\n",curSize);
			backtracking(0);
			printf("\n");
		}
		if(t)printf("\n");
	}
	return 0;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值