ACM: HDU 1028 Ignatius and the Princess III-DP
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
"The second problem is, given an positive integer N, we define an equation like this:
N=a[1]+a[2]+a[3]+...+a[m];
a[i]>0,1<=m<=N;
My question is how many different equations you can find for a given N.
For example, assume N is 4, we can find:
4 = 4;
4 = 3 + 1;
4 = 2 + 2;
4 = 2 + 1 + 1;
4 = 1 + 1 + 1 + 1;
so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. Now, you do it!"
Insilput
Output
Sample Input
4
10
20
Sample Output5
42
627
/*/
思路有点像模拟,先从小的开始排序,用样例1来说 4的位置可以只放1 {1,1,1,1};① 4的位置也可以放一个2 {2,1,1};这时候剩下2个位置,这状态可以做为一个往2个位置里面再去放东西来看 2的位置可以只放1 {1,1}; 对应的4个位置为 {2,1,1};② 2的位置也可以放一个2 {2}; 对应的4个位置为 {2,2};③ 4的位置可以放一个3 {3,1}; ④ 4的位置可以只放一个4 {4}; ⑤ 这就是整个过程.【现在放图】实现过程:
对于这个过程,如果一开始就是前面往后面去推的话,很容意发现,前面的插小空的状态是可以保存的,用dp保存每一个从x个填满y长度的方法个数。 如果y==x,那就说明已经填满了,最大的填放方法已经放完了。 又因为如果y>x的话,不可能放下去,就直接复制前面的种类次数就是的了,也就是:dp[x][y]=dp[x][x];//不可能往小位置里塞入大的数 直接结果就是dp[n][n]; AC代码:
/*/
#include"map"
#include"cmath"
#include"string"
#include"cstdio"
#include"vector"
#include"cstring"
#include"iostream"
#include"algorithm"
using namespace std;
typedef long long LL;
const int MX=202;
#define memset(x,y) memset(x,y,sizeof(x))
#define FK(x) cout<<"【"<<x<<"】"<<endl
int n,dp[MX][MX]; int main() {
memset(dp,0);
for(int i=1; i<MX; i++) { //把x,y=1的情况都标出来,为1。
dp[i][1]=dp[1][i]=1;
}
for(int x=2; x<MX; x++) {
for(int y=2; y<MX; y++) {
if(x<y) dp[x][y]=dp[x][x];//不可能往小位置里塞入大的数
if(x==y)dp[x][y]=dp[x][y-1]+1; //加上放入最大的数的一次。
if(x>y) dp[x][y]=dp[x][y-1]+dp[x-y][y];/* dp[x-y][y] 往x-y大小里面插入y的可能的次数*/
}/* dp[x][y-1] 前面的次数*/
}
while(~scanf("%d",&n))
printf("%d\n",dp[n][n]);
return 0;
}
ACM: HDU 1028 Ignatius and the Princess III-DP的更多相关文章
- hdu 1028 Ignatius and the Princess III(DP)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDU 1028 Ignatius and the Princess III dp整数划分
http://acm.hdu.edu.cn/showproblem.php?pid=1028 dp[i][j]表示数值为i,然后最小拆分的那个数是j的时候的总和. 1 = 1 2 = 1 + 1 . ...
- hdu 1028 Ignatius and the Princess III 简单dp
题目链接:hdu 1028 Ignatius and the Princess III 题意:对于给定的n,问有多少种组成方式 思路:dp[i][j],i表示要求的数,j表示组成i的最大值,最后答案是 ...
- HDU 1028 Ignatius and the Princess III 整数的划分问题(打表或者记忆化搜索)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1028 Ignatius and the Princess III Time Limit: 2000/1 ...
- HDU 1028 Ignatius and the Princess III (母函数或者dp,找规律,)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- hdu 1028 Ignatius and the Princess III 母函数
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- hdu 1028 Ignatius and the Princess III (n的划分)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- hdu 1028 Ignatius and the Princess III
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028 题目大意:3=1+1+1=1+2=3 :4=4=1+1+1+1=1+2+1=1+3:所以3有3种 ...
- HDU 1028 Ignatius and the Princess III:dp or 母函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028 题意: 给你一个正整数n,将n拆分成若干个正整数之和,问你有多少种方案. 注:"4 = ...
随机推荐
- cache buffers
buffers缓冲,可以型象的理解为漏斗.如果有大量的数据要写入磁盘,由于数据量很大,磁盘不能一下子接收,所以这个时候,就有了buffer这个漏斗,先把数据放入这个漏斗里面,然后让它慢慢的注入磁盘,这 ...
- HTML5 – 2.新元素
figcaption 定义和用法 <figcaption> 标签定义 figure 元素的标题(caption). "figcaption" 元素应该被置于 " ...
- .net转的时间戳用java去解析的代码
/// <summary> /// 转换成java解析一致的时间戳 /// </summary> /// <param name="time"> ...
- C编译: 动态连接库 (.so文件)(转摘)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在“纸上谈兵: 算法与数据结构”中,我在每一篇都会有一个C程序,用于实现算法和数据 ...
- thinkphp自动验证中的静态验证和动态验证和批量验证
1.静态定义 在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义. 举例说明,我们在模型类里面定义了$_validate属性如下: class UserModel extends Model ...
- WPF中使用ReportViewer报表
本篇博客将介绍如何在WPF中使用ReportViewer控件. 1. 环境准备:下载安装最新版ReportViewer(PS:需要安装Microsoft SQL Server System CLR T ...
- ASP.NET 5探险(2):上传文件
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在ASP.NET 5(MVC 6)中处理上传文件的方式和之前有所不同. 在MVC 5之 ...
- office excel 装Visual Studio后报错解决方案
安装完vs后,vs会向office安装COM加载项,但是在启动Excel时会发生弹出此加载项安装出错的消息,如下图. 名称: 从: file:///D:/Program Files (x86)/Mic ...
- Vue入门笔记#过渡
Vue过渡,可以在元素从DOM中移除,插入时自动调用过渡效果.根据设定,会适时的触发过渡效果. 在使用的目标标签里添加 transition: <div transition="my_ ...
- 遍历注册表回调函数(仿PCHunter CmpBack)
遍历注册表回调函数(仿PCHunter CmpBack) typedef struct _CAPTURE_REGISTRY_MANAGER { PDEVICE_OBJECT deviceObject; ...
实现过程:
对于这个过程,如果一开始就是前面往后面去推的话,很容意发现,前面的插小空的状态是可以保存的,用dp保存每一个从x个填满y长度的方法个数。
如果y==x,那就说明已经填满了,最大的填放方法已经放完了。
又因为如果y>x的话,不可能放下去,就直接复制前面的种类次数就是的了,也就是:dp[x][y]=dp[x][x];//不可能往小位置里塞入大的数
直接结果就是dp[n][n];
AC代码: