C++动态规划算法之子集的和
来源:互联网 发布:淘宝卖家不给发票投诉 编辑:程序博客网 时间:2024/05/20 22:36
子集的和
题目描述
对于从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} 和 {2,3,4,5} 1+6+7=2+3+4+5
{2,5,7} 和 {1,3,4,6}
{3,4,7} 和 {1,2,5,6}
{1,2,4,7} 和 {3,5,6}
给出N,你的程序应该输出划分方案总数,如果不存在这样的划分方案,则输出0。
输入
第1行:一个整数N
输出
第1行:输出划分方案总数,如果不存在则输出0。
样例输入
7
样例输出
4
代码
代码如下:
#include<iostream>using namespace std;long long num[50][10000];int n,QAQ;main(){ cin>>n; QAQ=(n*(n+1))/2; if(QAQ%2) { cout<<"0"<<endl; return 0; } for(int i=1;i<=QAQ/2;i++) num[0][i]=0; for(int i=0;i<=n;i++) num[i][0]=1; for(int i=1;i<=n;i++) for(int j=QAQ/2;j>=1;j--) num[i][j]=j>=i?num[i-1][j]+num[i-1][j-i]:num[i-1][j]; cout<<num[n][QAQ/2]/2<<endl;}
阅读全文
1 0
- C++动态规划算法之子集的和
- 动态规划之子集和问题
- 子集和(动态规划)
- 做题笔记——“动态规划”:子集的和
- 动态规划算法之最大字段和
- 子集和是否存在问题的动态规划和递归解
- 算法之动态规划
- 算法之动态规划
- 算法之动态规划
- 算法之动态规划
- 算法之动态规划
- 算法之动态规划
- 算法之动态规划
- 算法之动态规划
- 【算法】之动态规划
- 9.9递归和动态规划(四)——返回某集合的所有子集
- 动态规划法--求数组中最大子集合的和
- 程序员面试金典: 9.9 递归和动态规划 9.4求某集合的所有子集
- JSP中getparametervalues获得复选框选中的值
- Python的基本数据类型
- qualcomm的camera马达驱动代码分析
- UVa1395(最小值最小生成树+并查集)
- ubuntu搭建Gerrit代码审核服务器
- C++动态规划算法之子集的和
- Illegalaccessexception
- Xilinx hdenH焊板子过程错误分析
- 第一篇博客
- 超服贴!前端必修的项目练习之路
- php 常用类汇总
- 【c++语言基础】虚函数的概念
- fragment切换出现空白页
- 神奇的copy