BZOJ 1263 [SCOI2006]整数划分 - 高精度乘法

考虑不是划分成整数,而是划分成任意实数
设我们将n划分成了x个正实数之和
易知当这x个数相等时答案是最优的
那么每个数都是 nx ,答案是 (nx)x
y=(nx)x
则有 lny=x[lnnlnx]
两侧求导可得 y=(n/x)x(lnnlnx1)
x=ne 时y’取0 此时乘积最大
因此每个数要尽量靠近e才能使答案最大
现在考虑整数 离e最近的整数是3 因此要把n尽量分成3 不足的用2补齐 这样可以保证是最优的。
referring to: PoPoQQQ

所以可以得到以下结论:

如果n是3的倍数 那么将n划分成n/3个3是最优的
如果n是3的倍数+1 那么将n划分成(n-4)/3个3和两个2是最优的
如果n是3的倍数+2 那么将n划分成(n-2)/3个3和1个2是最优的

还撸了一遍python,发现老是PE。。。根本不会写啊。。。

#include<bits/stdc++.h>
#define lca long long 
using namespace std;
int tot;

struct big{
   int xx[5050];
   int cnt;
   big(int x=0)
   {
      memset(xx,0,sizeof(xx));
      xx[1]=x;
      cnt=1;
   }
   int & operator [] (int x)
   {
      return xx[x];
   }
}ans(1);

big operator *= (big &a,big &b)
{
   big z;
   for(int i=1;i<=a.cnt;i++) 
    for(int j=1;j<=b.cnt;j++) 
     z[i+j-1]+=a[i]*b[j],z[i+j]+=z[i+j-1]/10,z[i+j-1]%=10;
   z.cnt=a.cnt+b.cnt;
   if(!z[z.cnt]) z.cnt--;
   a=z;
}

int main()
{
    int n;
    scanf("%d",&n);
    while(n>4)
    {
       big temp(3);
       n-=3;
       ans*=temp;
    }
    if(n==4) 
    {
     big temp(4);
     ans*=temp;
    }
    else if(n==3) 
    {
     big temp(3);
     ans*=temp;
    }
    else if(n==2)
    {
     big temp(2);
     ans*=temp;
    }
    printf("%d\n",ans.cnt);
    for(int i=ans.cnt;i;i--)
    {
       printf("%d",ans[i]);
       tot++;
       if(tot==100)
        break;
    }
} 

PE 的py:

n=int(input())
sum=1
op=n%3
tim=(int)(n/3)
if op==0:
    while tim>0:
        tim-=1
        sum*=3
if op==1:
    tim-=1
    while tim>0:
        tim-=1
        sum*=3
    sum*=4
if op==2:
    while tim>0:
        tim-=1
        sum*=2
    sum*=2

temp=sum
num=0
basic=1
while temp>0:
    num+=1
    temp=temp//10
print('%d '%num)
if num<=100:
    print(sum)
else:
    temp=sum
    cnt=0
    basic=1
    while cnt!=num-100:
        cnt+=1
        temp=(temp//10)
    print('%d'%temp)

内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值