UVA10590 Boxes of Chocolates Again
题意
将正整数N拆分成若干个正整数之和,问有多少种不重复的拆分方案。
\(n \leq 5000\)
分析
用f(i,j)表示将i拆成若干个数字,最大的那个数字(即最后一个数)不超过j的方案数。
转移有两种情况,第一种是最大的数字不取j,第二种是取j
\[f(i,j)=f(i,j-1)+f(i-j,j)\]
时间复杂度\(O(N^2)\)
然后就可以做了吗?稍微分析一下发现需要高精度,那么空间复杂度是\(O(W \cdot N^2)\)的,W=100。
显然不行。
考虑压位高精,每个整数存8位,W=10,算了一下空间是953MB
考虑更换枚举顺序,外层先枚举j,发现满足正确性。
所以空间就可以降一维。
代码
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff;
const int MAXN=5e3+7;
const int pow10[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
struct Big
{
int a[10],len; // edit 1
void set(int x)
{
memset(a,0,sizeof(a));
len=1;
a[0]=x;
}
Big(int x=0)
{
set(x);
}
int&operator[](int x)
{
return a[x];
}
friend Big operator+(Big&x,Big&y)
{
Big z;
z.len=max(x.len,y.len);
for(int i=0;i<z.len;++i)
{
z[i]+=x[i]+y[i];
if(z[i]>=1e9)
{
z[i+1]+=z[i]/int(1e9);
z[i]%=int(1e9);
}
}
if(z[z.len])
++z.len;
return z;
}
void out()
{
for(int i=len-1;i>=0;--i)
{
if(i!=len-1)
for(int j=8;j>=1;--j) // edit 2
if(a[i]<=pow10[j]-1)
printf("0");
printf("%d",a[i]);
}
}
};
Big f[MAXN]; // edit 4
int main()
{
// freopen("UVA10590.in","r",stdin);
// freopen("UVA10590.out","w",stdout);
f[0].set(1);
for(int i=1;i<=5e3;++i) // edit 3
for(int j=i;j<=5e3;++j)
{
f[j]=f[j]+f[j-i];
}
int n;
while(~scanf("%d",&n))
{
f[n].out();
puts("");
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
Hint
注意压位高精输出的时候要补全前导0.
UVA10590 Boxes of Chocolates Again的更多相关文章
- Uva 10590 Boxes of Chocolates Again
题面戳这里 dp的姿势有两种(都保证了拆分的有序): \(f_{i,j}\)表示拆分中最大数为\(j\),和为\(i\)的方案数.转移\[f_{i,j} = \sum_{k = 1}^j f_{i-j ...
- ACM - 动态规划专题 题目整理
CodeForces 429B Working out 预处理出从四个顶点到某个位置的最大权值,再枚举相遇点,相遇的时候只有两种情况,取最优解即可. #include<iostream> ...
- Fedora 24 Gnome Boxes 无法ping通网络
安装Fedora 24在试用虚拟机时发现无法ping通外网. 我傻傻地以为是软件问题. 问题描述: 尝试ping程序来测试网络连通性: (我之前也是ping百度,后来在为了少打字百度了一些比较短的域名 ...
- Problem B Boxes in a Line
省赛B题....手写链表..其实很简单的.... 比赛时太急了,各种手残....没搞出来....要不然就有金了...注:对相邻的元素需要特判..... Problem B Boxes in a Li ...
- Codeforces Round #229 (Div. 2) C. Inna and Candy Boxes 树状数组s
C. Inna and Candy Boxes Inna loves sweets very much. She has n closed present boxes lines up in a ...
- boxes
boxes [英][bɒksɪz][美][bɑ:ksɪz] n.盒( box的名词复数 ); 一盒; 电视; 小亭; v.把…装入盒[箱,匣]中( box的第三人称单数 ); 拳击; 以上结果来自 ...
- Brute Force - B. Candy Boxes ( Codeforces Round #278 (Div. 2)
B. Candy Boxes Problem's Link: http://codeforces.com/contest/488/problem/B Mean: T题目意思很简单,不解释. ana ...
- UVa 103 - Stacking Boxes(dp求解)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- [CareerCup] 9.10 Stack Boxes 垒箱子问题
9.10 You have a stack of n boxes, with widths w., heights hir and depths drThe boxes cannot be rotat ...
随机推荐
- eclipse 里,打开的文件的各个标签,标题乱码。
Eclipse Mars 版本有这个问题. 提交到社区了,也还是没有人回答.Eclipse看来是没落了. https://www.eclipse.org/forums/index.php/t/1072 ...
- 雷林鹏分享:C# 预处理器指令
C# 预处理器指令 预处理器指令指导编译器在实际编译开始之前对信息进行预处理. 所有的预处理器指令都是以 # 开始.且在一行上,只有空白字符可以出现在预处理器指令之前.预处理器指令不是语句,所以它们不 ...
- 4-4 集成测试练习,和测试基础知识(guide)。
Guide指南 18章应用测试指南(简单学习了一下.) (中文版--主要是为了先理解,之前看过英文版受语言影响,怕理解有偏差.) Minitest::Test是ActiveSupport::TestC ...
- Jersey 2.x 探索新建的工程
如果用 Jersey maven archetype 成功创建了这个项目,那么在你当前的路径下就已经创建了一个名为simple-service项目.它包含了一个标准的Maven项目结构: 说明 文件目 ...
- LICEcap 和 FS Capture入门教程
上一篇介绍了如何使用 Visio 图形图表工具,文中贴了一张gif图,留言的小伙伴们迫不及待想知道如何录制 GIF 图,强哥姑且卖弄一次,把 PC 端截图工具和教程分享给大家,分别为 LICEcap ...
- service几种访问类型(集群外负载均衡访问LoadBalancer , 集群内访问ClusterIP,VPC内网负载均衡LoadBalancer ,集群外访问NodePort)
一.集群外访问(负载均衡) kind: ServiceapiVersion: v1spec: ports: - protocol: TCP port: 4341 targetPort: 8080 no ...
- CentOS服务器安装FFmpeg指南
CentOS服务器安装FFmpeg指南 服务器系统环境为:CentOS 6.5(final): 在服务器成功安装FFmpeg颇废了一番功夫,总结一下成功安装的过程,希望对大家有用 ^_^ : Ps:使 ...
- php数组转化为字符串
1.函数explode(); 这个是字符串转化为数组 , implode() ;这个是数组转化为字符串. $array=explode(separator,$string); $string=imp ...
- iterator not dereferencable问题
STL中的迭代器总是出现各种问题,这个是我在打表达式求值时碰到的... 综合网上的答案,一般来说有两种情况: 第一:访问了非法位置. 一般来说可能在queue为空时取front(),rear(),或者 ...
- 第 6 章 —— 依赖项注入(DI)容器 —— Ninject
有些读者只想理解 MVC 框架所提供的特性,而不想介入开发理念与开发方法学.笔者不打算让你改变 —— 这属于个人取向,而且你知道交付优质项目需要的是什么. 建议你至少粗略第看一看本章的内容,以明白哪些 ...