HDU 1028 Ignatius and the Princess III 整数的划分问题(打表或者记忆化搜索)
传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=1028
Ignatius and the Princess III
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24967 Accepted Submission(s): 17245
"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!"
10
20
42
627
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define max_v 125
/*LL f(int n,int m)
{
if(n==1||m==1)
return 1;
else if(n==m&&n>1)
{
return f(n,n-1)+1;
}else if(n<m)
{
return f(n,n);
}else if(n>m)
{
return f(n,m-1)+f(n-m,m);
}
}*/
int main()
{
LL a[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
/*for(int i=1;i<max_v;i++)
{
printf("%I64d,",f(i,i));
}
printf("\n**\n");*/
int n;
while(~scanf("%d",&n))
{
printf("%I64d\n",a[n]);
// printf("%I64d\n",f(n,n));
}
return ;
}
2.另外一种做法
记忆化搜索
就是在搜索之前先判断一下,搜过了就不再搜索了
跟dp一个意思
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define max_v 125
int dp[max_v][max_v];
LL f(int n,int m)
{
if(dp[n][m]!=-)//判断有没有搜过
return dp[n][m];
if(n==||m==)
return dp[n][m]=;
else if(n==m&&n>)
{
return dp[n][m]=f(n,n-)+;
}else if(n<m)
{
return dp[n][m]=f(n,n);
}else if(n>m)
{
return dp[n][m]=f(n,m-)+f(n-m,m);
}
}
int main()
{
//两种做法
//LL a[]={0,1,2,3,5,7,11,15,22,30,42,56,77,101,135,176,231,297,385,490,627,792,1002,1255,1575,1958,2436,3010,3718,4565,5604,6842,8349,10143,12310,14883,17977,21637,26015,31185,37338,44583,53174,63261,75175,89134,105558,124754,147273,173525,204226,239943,281589,329931,386155,451276,526823,614154,715220,831820,966467,1121505,1300156,1505499,1741630,2012558,2323520,2679689,3087735,3554345,4087968,4697205,5392783,6185689,7089500,8118264,9289091,10619863,12132164,13848650,15796476,18004327,20506255,23338469,26543660,30167357,34262962,38887673,44108109,49995925,56634173,64112359,72533807,82010177,92669720,104651419,118114304,133230930,150198136,169229875,190569292,214481126,241265379,271248950,304801365,342325709,384276336,431149389,483502844,541946240,607163746,679903203,761002156,851376628,952050665,1064144451,1188908248,1327710076,1482074143,1653668665,1844349560,2056148051,2291320912,2552338241,2841940500};
/*for(int i=1;i<max_v;i++)
{
printf("%I64d,",f(i,i));
}
printf("\n**\n");*/
memset(dp,-,sizeof(dp));//没有搜索的标记
int n;
while(~scanf("%d",&n))
{
//printf("%I64d\n",a[n]);
printf("%I64d\n",f(n,n));
}
return ;
}
HDU 1028 Ignatius and the Princess III 整数的划分问题(打表或者记忆化搜索)的更多相关文章
- 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 母函数
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)
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,找规律,)
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 (递归,dp)
以下引用部分全都来自:http://blog.csdn.net/ice_crazy/article/details/7478802 Ice—Crazy的专栏 分析: HDU 1028 摘: 本题的意 ...
- HDU 1028 Ignatius and the Princess III (生成函数/母函数)
题目链接:HDU 1028 Problem Description "Well, it seems the first problem is too easy. I will let you ...
- HDU 1028 Ignatius and the Princess III (动态规划)
题目链接:HDU 1028 Problem Description "Well, it seems the first problem is too easy. I will let you ...
- 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 . ...
随机推荐
- CentOS 7运维管理笔记(12)----GUI配置工具Webmin的安装
早期的Linux系统管理员或是Web管理员在修改服务器配置时使用最多的就是vi编辑器,但是现在越来越多的基于GUI界面的配置工具出现了,毕竟人们还是喜欢以直接的可视化的方式来修改服务器的配置,而不是再 ...
- 解决Maven 报 Return code is: 400 , ReasonPhrase:Repository version policy: SNAPSHOT does not allow version: 2.1.0.RELEASE. 的错误
最近在搭建公司的基础框架,业务需求用到elasticsearch,所以需要整合到基础框架里,供各业务线使用同时也便于管理,但在整合的过程中,出现了莫名的问题,同时maven的提示也不够明确. 我的版本 ...
- hiho一下 第一周 最长回文子串
时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这 ...
- shell 脚本解压war包+备份+tomcat自动关闭+启动
公司的开发环境每次替换war包时候,老是需要重新上传并且手动解压,然后再去重启tomcat.觉得这样子太麻烦了,于是写了一个shell脚本,自动解压+备份+tomcat自动关闭+启动.代码如下: #关 ...
- Hadoop High Availability高可用
HDFS HA Namenode HA 详解 hadoop2.x 之后,Clouera 提出了 QJM/Qurom Journal Manager,这是一个基于 Paxos 算法(分布式一致性算法) ...
- Simotion 绝对值编码器使用外部开关回零
问题来源: 西门子的1FK7二代电机,目前已经没有增量编码器.标准的编码器选项是单圈绝对值,或多圈绝对值. 在某些应用中,如印刷机的版辊.模切轴.飞剪电机等,需要使用外部开关来回零.下文描述了使用外部 ...
- Hibernate初探之一对多映射 及 myeclipse自动生成hibernate文件方法
实现单向一对多: 1)在one方的实体中添加保存many方的集合 2)在one方的配置文件中添加<one-to-many>配置 实现单向多对一: 1)在many方的实体中添加one方的引用 ...
- MVC 接收参数时会自动解码
MVC在接收传递过来的参数时,会自动对参数进行解码,无需手动解码 例: public ActionResult SendMsg2(string name) { return Content(name) ...
- Go语言(三)反射机制
package main import( "fmt" "reflect" ) func main(){ // iterate through the attri ...
- make menuconfig 出错解决
问题: hank@hank-virtual-machine:/opt/Emb/linux-2.6.30.4$ sudo make menuconfig *** Unable to find the n ...