站外题[贪心+高精]求调
  • 板块题目总版
  • 楼主shy_lihui
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/11 11:23
  • 上次更新2024/7/11 12:55:43
查看原帖
站外题[贪心+高精]求调
1053122
shy_lihui楼主2024/7/11 11:23

帮找题悬棺

最优分解方案

经过第一轮的游戏,不少同学将会获得圣诞特别礼物,但这时细心的数学课代表发现了一个问题:留下来的人太多而使礼物数量可能不够,为此,加试了一道数学题:将一个正整数 n 分解成若干个互不相等的正整数的和,使得这些数的乘积最大,当主持人报出一个 n 后,请你立即将这个最大值报出来,现请你帮你的好友编一个程序来解决这个问题。

这是我的代码90pts

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<map>
#pragma GCC optimize(2)
#define ll long long
using namespace std;
int n,l,la;
int a[100005];
int ans[100005];
int main()
{
	ans[0]=1;
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	for(int i=2;i<=10000;i++)
	{
		if(n<i)
		{
			break;
		}
		else
		{
			n-=i;
		}		
		a[la]=i;
		la++;
	}
	for(int i=la-1;i>=la-n;i--)
	{
		a[i]++;
	}
	ll jy=0;
	for(int i=0;i<la;i++)
	{
		for(int j=0;j<=10000;j++)
		{
			ans[j]=ans[j]*a[i]+jy;
			jy=ans[j]/10;
			ans[j]%=10;
		}
	}
	int lans=10000;
	while(ans[lans]==0)
	{
		lans--;
	}
	for(int i=lans;i>=0;i--)
	{
		cout<<ans[i];
	}
	return 0;
}
2024/7/11 11:23
加载中...