CODEVS 2055 集合划分
【题目描述】
对于从1到N(1<=N<=39)的连续整数集合,划分成两个子集合,使得每个集合的数字之和相等。
举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等的:{3} and {1,2}
这是唯一的一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)。
如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分法的子集合各数字和是相等的:
{1,6,7} and {2,3,4,5};{2,5,7} and {1,3,4,6};
{3,4,7} and {1,2,5,6};{1,2,4,7} and {3,5,6}
【输入】
一个正整数N,1<=N<=39
【输出】
一个数,划分集合的方法数。
【样例输入】
7
【样例输出】
4
【解题思路】
这是一只 背包型的DP,求方案的那种,f[i,j]表示前i个数的取值为j的方案数
正推 : f[i,j]:=f[i-1,j]+f[i-1,j-i];
初始条件:f[1,1]:=1; f[1,0]:=1;
倒推(f[i,j]表示i~n个中取值为j)
f[i,j]:=f[i+1,j]+f[i+1,j-i];
初始条件:f[n,n]:=1; f[n,0]:=1;
program t2;
var n,sum,i,j:longint;
f:array[..,..] of longint;
begin
read(n);
sum:=(n+)*n div ;
if sum mod = then//特判
begin
write();
halt;
end;
sum:=sum div ;
f[,]:=;//从前1个数中取数为1的方法为1中,下同
f[,]:=; for i:= to n- do//默认n个在另一个数组里
for j:= to (i+)*i div do
begin
f[i,j]:=f[i-,j];
if j-i>= then f[i,j]:=f[i,j]+f[i-,j-i];//防越界
end;
writeln(f[n-,sum]);
end.
CODEVS 2055 集合划分的更多相关文章
- [CODEVS2055]集合划分
对于从1到N(1<=N<=3)的连续整数集合,划分成两个子集合,使得每个集合的数字之和相等.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等的:{3} ...
- 集合划分——cf1028D思维题
非常思维的一道题目,题意很长 给定s1,s2两个集合,s1维护最大值,s2维护最小值,s1的所有元素要比s2小 操作1:往两个集合里的任意一个添加x 操作2:把x从所在的集合里删掉:要求被删的x必须是 ...
- [P5748] 集合划分计数 - 生成函数,NTT
求 \(10^5\) 以内的所有贝尔数:将 \(n\) 个有标号的球划分为若干非空集合的方案数 Solution 非空集合的指数生成函数为 \(F(x)=e^x-1\) 枚举一共用多少个集合,答案就是 ...
- LuoguP5748 集合划分计数
题意 一个有\(n\)个元素的集合,将其分为任意个非空子集,求方案数.集合之间是无序的,\(\{\{1,2\},\{3\}\}=\{\{3\},\{1,2\}\}\). 设\(f_n\)表示用\(n\ ...
- Atcoder Grand Contest 038 F - Two Permutations(集合划分模型+最小割)
洛谷题面传送门 & Atcoder 题面传送门 好久前做的题了--今天偶然想起来要补个题解 首先考虑排列 \(A_i\) 要么等于 \(i\),要么等于 \(P_i\) 这个条件有什么用.我们 ...
- N个元素的集合划分成互斥的两个子集的数目
前面这是寒假听马士兵老师讲的时候积累的语录.......... 1.php是水果刀,java是菜刀,刀法比较多,一年的和三年的区别很大. 2.nanicat连接mysql出现10061是服务没开启,却 ...
- 集合划分状压dp
给一个 $n$ 个点 $m$ 条边的无向图,每条边有 $p_i$ 的概率消失,求图连通的概率 $n \leq 9$ sol: 我们考虑一个 $dp$ $f_{(i,S)}$ 表示只考虑前 $i$ 条边 ...
- BZOJ 2127: happiness(最小割解决集合划分)
Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 2350 Solved: 1138[Submit][Status][Discuss] Descript ...
- c#集合解析
什么是集合(collection)? 提供了一种结构化组织任意对象的方式,从.NET 的角度看,所谓的集合可以定义为一种对象,这种对象实现一个或者多个System.Collections.IColle ...
随机推荐
- SVN理解
先说说什么是branch.按照Subversion的说法,一个branch是某个development line(通常是主线也即trunk)的一个拷贝,见下图: branch存在的意义在于,在不干扰t ...
- 异常的应用finally与总结
一.finally{ },finally块中放入一定要执行的代码,通常用来关闭数据库,关闭链接,节约资源,所以finally中的内容一定要被执行,但是有一张情况不被执行,就是catch(Excep ...
- 关于MyBatis的工作流程
1.从一个jdbc程序开始 public static void main(String[] args) { Connection connection = null; PreparedStateme ...
- Redhat和ubuntu的区别
风大神给了我一个完全基于 Linux 的操作系统ubuntu(乌班图)(是一个以桌面应用为主的Linux操作系统),当然作为linux,服务器应用都不会弱.,说是这个好用,可飞凌上资料用的居然是red ...
- .NET学习笔记(2) — IIS服务器环境搭建
目录 一:开启Windows系统自带的IIS服务器方法 二:备注 三:常见问题 一:开启Windows系统自带的IIS服务器方法 第一步:安装IIS,控制面板->程序和功能-> ...
- Appium Python Driver Api
- Android logcat使用
Android logcat使用 1. Android日志说明 当Android系统运行的时候,会搜集所有的系统信息. logcat是Android系统的一个命令行工具,主要用来查看和过滤日志信息. ...
- 第十四篇、Ajax与Json
1.Ajax的核心知识 1.1 XMLHttpRequest对象 function loadName(){ var xmlHttp; if(window.XMLHttpRequest){ xmlHtt ...
- 使用FreeMarker生成静态HTML
1.FreeMarker需要添加的Maven依赖: <dependency> <groupId>org.freemarker</groupId> <artif ...
- SQL Constraint/Index
1.SQL Constraint Integrity Constraints are used to apply business rules for the database tables. The ...