067_划分数
来源:互联网 发布:深圳java薪水 编辑:程序博客网 时间:2024/06/06 11:01
有n个无差别物品,划分成不超过m组,求划分的方案个数。
此类DP 问题定义如下:
dp[i][j]=j个物品的i划分的总数。
DP的时候分两部分讨论:如果划分没有某一组是空的,即正好划分成i组,所以每组至少可以拿出一个物品,即为dp[i][j-i]。
或者至少有一组是空的,即其划分数为dp[i-1][j];
so, dp[i][j]=dp[i][j-i]+dp[i-1][j]
注意初始化的问题。当0个物品划分成0组时,只有一种划分方案;当0个物品划分成i(i>=1)组时,不存在方案,为0;
《挑战程序竞赛》第二版67页貌似程序初始化有误,其程序运行结果貌似不正确。
上代码:
//// 067_stirling num.cpp// changlle//// Created by user on 12/29/15.// Copyright (c) 2015 user. All rights reserved.//#include <iostream>#include <algorithm>using namespace std;int n=4;int m=3;int M=10000;int main() { int dp[4][5]; dp[0][0]=1; for (int j=1;j<=n;j++) dp[0][j]=0; for (int i=1;i<=m;i++) for (int j=0;j<=n;j++) { if (j-i>=0) dp[i][j]=dp[i][j-i]+dp[i-1][j]; else dp[i][j]=dp[i-1][j]; } for (int i=0;i<=m;i++) { for (int j=0;j<=n;j++) cout<<dp[i][j]<<" "; cout<<endl; } cout<<dp[m][n]<<endl; return 0;}
0 0
- 067_划分数
- CCF_OJ_1185、1186_数的划分一、二 题解
- 挑战程序设计竞赛笔记_计数DP划分数_P67
- 数划分
- 划分数
- 划分数
- 划分数
- 划分数
- 划分数
- 划分数
- 划分数
- 划分数
- 划分数
- 数的划分
- 数的划分
- 数的划分问题
- 数的划分
- [NOIP2001]数的划分
- 判断代理方法是否为空
- 【扩展欧几里得】Codevs 1200: [noip2012]同余方程
- Jquery之append()函数的应用
- 注解
- 25个Java机器学习工具&库
- 067_划分数
- Socket通讯采集推送LED(SER)
- log4erl输出error_logger
- 数据库基础学习----基础概念篇1
- UIActionSheet使用
- QGis二次开发基础 -- 构建图层管理器
- 庖丁解牛之UPack工作原理及实例分析(3)
- Linux "ls -l"文件列表权限详解
- android5.1系统TvSettings为选择项添加背景颜色