求整数的拆分数。。

一种解法是母函数

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 10000
int dp[][];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
for(int k=;j+k*i<=n;k++)
{
dp[i%][j+k*i]+=dp[(i-)%][j];
}
dp[(i-)%][j]=;
}
}
printf("%d\n",dp[n%][n]);
}
return ;
}

还有一种dp的方法

dp[n][m]表示 把n拆分成不大于 m的数的方案数

转移的时候按照拆分中的最大的数分类一下。。

dp[n][m]=sum {i=1~n}  ( dp[i][n-i] )----分类中最大数为  1~n

代码写成递归的记忆化搜索了

#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 10000
int dp[][];
int dfs(int n,int m)
{
if(dp[n][m]!=-)
return dp[n][m];
if(m==)
return dp[n][]=;
if(n==)
return dp[][m]=;
if(m>n)
return dfs(n,n);
return dp[n][m]=dfs(n,m-)+dfs(n-m,m);
}
int main()
{
memset(dp,-,sizeof(dp));
int t,x;
while(scanf("%d",&x)!=EOF)
{
printf("%d\n",dfs(x,x));
} return ;
}

最新文章

  1. SQL 归来
  2. iOS多线程笔记
  3. iOS 常用第三方类库、完整APP示例
  4. mysql配置以及性能优化(转)
  5. C#学习笔记-ContextMenuStrip
  6. XBOX ONE游戏开发之登陆服务器(一)
  7. 【BZOJ 4516】【SDOI 2016】生成魔咒
  8. FormData、Blob、File、ArrayBuffer数据类型
  9. ahjesus linux连接阿里云ubuntu服务器并更改默认账号和密码,以及创建子账户
  10. Erlang之父的学习历史及学习建议
  11. ThinkPHP 购物商城网站(数据库中增删改查的功能实现)——————重点——————
  12. iOS开发——控制器OC篇&amp;UINavigationController&amp;UITabBarController详解
  13. Java基础——关键字
  14. 最近看了点C++,分享一下我的进度吧!
  15. linux内核学习之进程管理------task_struct结构体
  16. 几个前端博客 good
  17. Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
  18. v9更换域名
  19. 在地铁上看了zabbix 的书发现 &quot;报警执行远程命令&quot;
  20. Python爬虫 股票数据爬取

热门文章

  1. c语言学习笔记(1)——c语言的特点
  2. delphi算法
  3. 白话C#:特性(转)
  4. ruby gems安装镜像
  5. 从不同层面看cocos2d-x
  6. 《STL源代码剖析》---stl_alloc.h阅读笔记
  7. Netmon: A light-weight network monitor for Windows
  8. 网页HTML
  9. 网页、JavaScript 数据类型
  10. Android Activity 分类