HDU 1028 Ignatius and the Princess III dp
Posted EricJeffrey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1028 Ignatius and the Princess III dp相关的知识,希望对你有一定的参考价值。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028
一道经典题,也是算法设计与分析上的一道题,可以用递推,动态规划,母函数求解,我用的是动态规划,也就是递推的变形。
dp[i][j]表示数i的划分中最大数不超过j的划分的个数
状态转移方程:
if(j > i)
dp[i][j] = dp[i][i];
if(j == i)
dp[i][j] = dp[i][j - 1] + 1;
if(j < i)
dp[i][j] = dp[i][j - 1] + dp[i - j][j];
当然前提是dp[x][1]=1
对于j<i的时候的转移方程可以这么理解:
如果我要求dp[5][3], 那么我可以先加上dp[5][2]也就是最大数不超过2的划分;然后接下来我要加上的若干个划分每个划分中至少包括一个3,而且最大的是3,那么对于这若干个划分任意一个划分去掉3的话,就变成了5-3的最大数不超过3的划分的个数-->即有dp[5][3] = dp[5][2]+dp[2][3].
代码:
1 #define maxn 135 2 int dp[maxn][maxn]; 3 4 int dowork(int x){ 5 for(int i = 1; i <= x; i++) 6 dp[i][1] = 1; 7 for(int i = 1; i <= x; i++) 8 dp[1][i] = 1; 9 for(int i = 2; i <= x; i++){ 10 for(int j = 2; j <= x; j++){ 11 if(j > i) 12 dp[i][j] = dp[i][i]; 13 if(j == i) 14 dp[i][j] = dp[i][j - 1] + 1; 15 if(j < i) 16 dp[i][j] = dp[i][j - 1] + dp[i - j][j]; 17 18 //printf("dp(%d, %d):%d ", i, j, dp[i][j]); 19 } 20 //puts(""); 21 } 22 return dp[x][x]; 23 } 24 25 int main(){ 26 int n; 27 while(scanf("%d", &n) != EOF){ 28 memset(dp, 0, sizeof(dp)); 29 printf("%d\n", dowork(n)); 30 } 31 }
题目:
Ignatius and the Princess III
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21162 Accepted Submission(s): 14776
"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!"
以上是关于HDU 1028 Ignatius and the Princess III dp的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1028 Ignatius and the Princess III (动态规划)
hdu 1028 Ignatius and the Princess III
HDU 1028: Ignatius and the Princess III
hdu 1028 Ignatius and the Princess III 母函数