【整数划分+DP】HDU_1028_D
来源:互联网 发布:centos 6.8 搭建lnmp 编辑:程序博客网 时间:2024/06/05 11:16
Ignatius and the Princess III
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22366 Accepted Submission(s): 15616
Problem Description
"Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says.
"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!"
"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!"
Input
The input contains several test cases. Each test case contains a positive integer N(1<=N<=120) which is mentioned above. The input is terminated by the end of file.
Output
For each test case, you have to output a line contains an integer P which indicate the different equations you have found.
Sample Input
41020
Sample Output
542627
Author
Ignatius.L
Recommend
#include <bits/stdc++.h>using namespace std;int split(int n,int m){ if(n==1||m==1) return 1; if(m>n) return split(n,n); else if(n==m) return split(n,m-1)+1; else return split(n,m-1)+split(n-m,m);}int dp[125][125];int main(){ int n; while(~scanf("%d",&n)){// int ans=split(n,n);// printf("%d\n",ans); for(int i=1;i<=n;i++){/*分解数i*/ for(int j=1;j<=n;j++){/*分解的数中最大的为j*/ if(i==1||j==1) dp[i][j]=1; else if(j>i) dp[i][j]=dp[i][i]; else if(i==j) dp[i][j]=dp[i][j-1]+1; else dp[i][j]=dp[i][j-1]+dp[i-j][j]; } } printf("%d\n",dp[n][n]); } return 0;}
阅读全文
0 0
- 【整数划分+DP】HDU_1028_D
- 【划分型DP】整数划分
- 区间DP 整数划分
- 整数划分问题 【DP】
- 整数划分问题 DP
- 整数划分 区间dp
- 整数划分(区间dp)
- 整数划分DP
- dp-整数划分问题
- DP经典 ----- 整数划分
- DP·整数划分
- 区间dp(整数划分,石子划分)
- nyoj 90 整数划分【dp划分数】
- nyoj90整数划分(dp)
- nyoj+区间dp整数划分
- DP算法之整数划分
- hdu 5230(整数划分,dp)
- 区间dp----整数划分nyoj746
- C++中循环语句语法
- 指针与句柄的区别
- Aggressive Cows
- python中的进程, 线程
- 如何学习C#和C++
- 【整数划分+DP】HDU_1028_D
- hdu 6097 Mindis
- STM32定时器(TIM)之通用定时器
- 退出和退出状态码
- Cocos Creator Joystick虚拟摇杆
- 【CSU 1529】Equator (前缀和,双端队列)
- Spring(1)Ioc和Aop底层原理
- Java异常处理,学习留档
- leetcode 198. House Robber | 动态规划