uva-165-枚举

Posted 菜菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva-165-枚举相关的知识,希望对你有一定的参考价值。

题意:选取k种面额的邮票,总数是h,要求组合出来的连续数最大

枚举,网上看到一个更快的等价类划分,留着学等价类划分的思路

#include<stdio.h>
#include<iostream>
#include<sstream>
#include<queue>
#include<map>
#include<memory.h>
#include <math.h>
#include<time.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
const int N = 200;
int res[N], stamp[N], m[N];
int h, k;
int final = -1;
int vis[N];
void dfs(int cur, int n, int sum)
{
	if(cur == h)
	{
		vis[sum] = 1;
		return;
	}
	vis[sum] = 1;
	for(int i = 0; i <= n; i++)
		dfs(cur + 1, n, sum + stamp[i]);
}
void search(int cur)
{
	if(cur == k)
	{
		if(m[cur - 1] > final)
		{
			final = m[cur - 1];
			memcpy(res, stamp, sizeof(res));
		}
		return;
	}
	for(int i = stamp[cur-1] + 1; i <= m[cur - 1] + 1; i++)
	{
		memset(vis, 0, sizeof(vis));
		stamp[cur] = i;
		dfs(0, cur, 0);
		int j = 1;
		int num = 0;
		while (vis[j++])
			num++;
		m[cur] = num;
		search(cur + 1);
	}

}
int main()
{
	freopen("d:\\1.txt", "r", stdin);
	while (cin >> h >> k && h && k)
	{
		m[0] = h;
		stamp[0] = 1;
		final = -1;
		search(1);
		for(int i = 0; i < k;i++)
		{
			printf("%3d",res[i]);
		}
		printf(" ->%3d\n",final);
	}
	return 0;
}

  

以上是关于uva-165-枚举的主要内容,如果未能解决你的问题,请参考以下文章

Java中枚举的写法和用法

PAT1049-----枚举法,找规律题,注意降低时间复杂度

如何在C ++中将枚举导入不同的命名空间?

C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法

JAVA枚举小结

如何将 Relay 变量设置为枚举值?