Mask Allocation(思维,递归)

博客介绍了如何使用递归方法解决一个物资分配问题,要求序列能平均分成n组或m组,保持字典序最大。作者通过递归思路找到了解决方案,强调了递归的结束条件和处理1的情况。
摘要由CSDN通过智能技术生成

传送门
在这里插入图片描述
题意:已知n,m,有n*m个物资,要求输出一个序列,具体一个数不能拆开,但多个数可以组合在一起,要求该序列可以平均组合成n组或m组,且必须字典序最大

我想了半天,一直想着找规律把序列给凑出来,中间我好像也想到过递归,但停留时间太短,没有拿递归,谁知道递归这么简单,555菜哭了人,果然我还是差点火候,然后超级棒的队友貌似找到了规律,ac了,接下来是我补题时用的递归思考过程

n*m个物资需要都能组合成n组或m组(让n始终>m),我们就可以先拎出m个m,然后剩下的left就可以转化成一个子问题(n-m,m),然后就可以写递归了,有个注意点强调一下,就是递归的结束终点,n==m输出n个m,还有就是出现1那就输出若干个1

AC代码

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<set>
#include<map>
#include<sstream>
#include<iomanip>
#define ll long long
using namespace std;
const int mod = 1e9 + 7;

int t;
int n,m;
int ans[1000005];
int cnt = 0;
void f(int n, int m)
{
	if (n < m) swap(n, m);
	if (m == 1)
	{
	
		for (int i = 1; i <= n; i++)
		{
			
			ans[cnt++] = 1;
		}
		return;
	}
	if (n == m)
	{

		for (int i = 1; i <= n; i++)
		{

			ans[cnt++] = m;
		}
	}
	else if (n > m)
	{
	
		for (int i = 1; i <= m; i++)
		{
		
			ans[cnt++] = m;
		}
		int left = n * m - m * m;
		f(n - m, m);
	}
}
int main()
{
	cin >> t;
	while (t--)
	{
	
		memset(ans, 0, sizeof(ans));
		cnt = 0;
		cin >> n >> m;
		f(n, m);
		sort(ans, ans + cnt);
		cout << cnt << endl;
		for (int i = cnt - 1; i >= 0; i--)
		{
		
			cout << ans[i] << " ";
		}
		cout << endl;
	}
}

springboot052基于Springboot+Vue旅游管理系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值