HDU 1028 简单动态规划
2016-08-29 17:10
357 查看
"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!"
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
Sample Output
View Code
"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
4 10 20
Sample Output
5 42 627 分治或者动态规划吧 给定一个正整数n,求它有多少种正整数和a1、a2……的组合形式。 m为这些正整数中最大的,有如下方程 f(n,m) = 1---------------n=1/m=1 f(n-m,m)+f(n,m-1)--m<=n f(n,n)-------------m>n 1------------------n=0
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <stdlib.h> #define MAXSIZE 125 using namespace std; int n; int f[MAXSIZE][MAXSIZE]; int main() { //freopen("caicai.txt","r",stdin); int i,j; for(i = 1;i<MAXSIZE;i++) { f[i][1] = 1; f[1][i] = 1; f[0][i] = 1;//下文可能出现i-j=0 } for(i = 2;i<MAXSIZE;i++) for(j = 2;j<MAXSIZE;j++) { if(i>=j) f[i][j] = f[i-j][j]+f[i][j-1]; else f[i][j] = f[i][i]; } while(scanf("%d",&n)!=EOF) { cout<<f <<endl; } return 0; }
View Code
相关文章推荐
- hdu 2059 简单动态规划
- hdu1231最大连续子序列(简单的动态规划)
- HDU 1003 Max Sum - 简单动态规划
- HDU 1267(简单的动态规划)
- HDU 1520 浅谈简单树形动态规划
- HDU 1158(简单的动态规划)
- hdu 1069 简单动态规划
- 动态规划--HDU--1028
- hdu1069 Monkey and Banana 一个简单的动态规划
- HDU 2571 命运 【简单动态规划】
- HDU 2041 超级楼梯 简单DP动态规划 递归
- HDU 5366 简单动态规划DP
- hdu 1466 计算直线的交点数 (简单的动态规划)
- HDU 2084 数塔 (C++) (简单的动态规划)
- hdu 1176 简单动态规划
- DP动态规划——hdu 1008 Common Subsequence(最长公共子序列)
- HDU 1024动态规划问题
- 简单动态规划——电路布线
- HDU 2159 FATE (动态规划dp之二维完全背包问题)
- DP动态规划——hdu 1008 Common Subsequence(最长公共子序列)