Ignatius and the Princess III(母函数或动态规划)
2013-05-14 20:49
597 查看
HDOJ1028:
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 +
4000
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
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 +
4000
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个苹果放入n个盘中; //不过需要开辟一个dp数组保存计算值,避免重复计算超时; #include<stdio.h> #include<string.h> int dp[130][130]; int apple(int a,int b) { if(dp[a][b]!=-1) return dp[a][b]; if(a==0||b==1) dp[a][b]=1; else { if(a<b) dp[a][b]=apple(a,a); else dp[a][b]=apple(a,b-1)+apple(a-b,b); } return dp[a][b]; } int main() { int t; while(scanf("%d",&t)!=EOF) { memset(dp,-1,sizeof(dp)); printf("%d\n",apple(t,t)); } return 0; }
//母函数求解; #include <iostream> using namespace std; int main() { int n; int c1[130],c2[130]; //c1数组存储最终结果,c2存储中间量; while(cin>>n) { for(int i=0;i<=n;i++) { c1[i]=1; c2[i]=0; } for(int i=2;i<=n;i++)//i是第i个表达式; { for(int j=0;j<=n;j++)//j是第一个表达式中的取0,1...n; for(int k=0;k+j<=n;k+=i)//k是第i个表达式中的取0,i,2*i,3*i...; c2[k+j]+=c1[j]; for(int j=0;j<=n;j++) { c1[j]=c2[j]; c2[j]=0; } } cout<<c1 <<endl; } return 0; }
相关文章推荐
- HDU 1028 Ignatius and the Princess III(母函数 或者 整数划分的DP动态规划)
- HDU 1028 Ignatius and the Princess III (母函数 或 动态规划DP)
- HDU-1028 Ignatius and the Princess III(母函数)
- Ignatius and the Princess III(hdu1028,母函数之整数划分)
- [ACM] hdu 1028 Ignatius and the Princess III (母函数)
- hdoj1028Ignatius and the Princess III(整数无序分划,动态规划)
- HDU-Ignatius and the Princess III-母函数-整数拆分
- HDU 1028 Ignatius and the Princess III(递推或母函数)
- poj1028--动态规划--Ignatius and the Princess III
- 杭电1028_Ignatius and the Princess III(母函数、DP)——java
- HDOJ 题目1028Ignatius and the Princess III(母函数模板)
- HDU 1028 Ignatius and the Princess III 动态规划完全背包
- [ACM] hdu 1028 Ignatius and the Princess III (母函数)
- 【母函数】hdu1028(Ignatius and the Princess III)
- HDU1398-Square Coins,HDU1028-Ignatius and the Princess III(母函数)
- HDU 1028 Ignatius and the Princess III 母函数
- hdoj 1028 Ignatius and the Princess III(母函数)
- HDOJ-1028Ignatius and the Princess III---(整数划分的母函数做法)
- HDU1028 Ignatius and the Princess III(整数拆分:母函数||DP)
- HDU - 1028 Ignatius and the Princess III(母函数)