1 条题解
-
0
数学,贪心,高精
用多3少2无1策略
为什么呢???
假设n为要划分的数
先说无1 如果n=(n-1)+1 不如n=n
因为1×(n-1)=n-1<n
再说多3
如果n=6
多2 6=2+2+2 2×2×2=8
多3 6=3+3 3×3=9
9>8
那为什么不用多4甚至多更大的数的策略呢?
如果n=12
多3 12=3+3+3+3 3×3×3×3=81
多4 12=4+4+4 4×4×4=64
多6 12=6+6 6×6=36
多大于4的数,它们甚至比多2还差
多2 12=2+2+2+2+2+2 2×2×2×2×2×2=64
64>36
先分成尽量多的3
如果余数0 刚刚好直接乘就行了
如果余数1 少一个3,多两个2(3×1<2×2)
如果余数2 就用2乘
不存在余数>=3的情况(余数小于除数3)
#include <bits/stdc++.h> using namespace std; const int N=5005; int a[N], len; void mul(int *a, int &len, int x) { for(int i=1; i<=len; i++) a[i] *= x; for(int i=1; i<=len; i++) { a[i+1] += a[i]/10; a[i] %= 10; } if(a[len+1] > 0) len++; } int main() { int n; scanf("%d", &n); a[len=1] = 1; for(; n>4; n -= 3) mul(a, len, 3); mul(a, len, n); cout << len << '\n'; for(int i=len; i >= len-99 && i >=1; i--) printf("%d", a[i]); return 0; }
- 1
信息
- ID
- 2916
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 121
- 已通过
- 52
- 上传者