zoukankan      html  css  js  c++  java
  • 整数拆分问题

    整数分拆问题是一个古老而又十分有趣的问题。所谓整数的分拆[1]  ,指将一个正整数表示为若干个正整数的和。不考虑其求和的顺序,一般假定

    满足
    正整数的一种拆分可以理解为将n个无区别的球放入n个无区别的盒子,每种方案就是一种拆分。
    这篇博客
    http://blog.chinaunix.net/uid-26548237-id-3503956.html
    讲的非常好,易于理解
     
    一个用动态规划求解的办法如下
     1 #include <cstdio>
     2 #include <cstring>
     3 int n;
     4 int dp[1002][1002];
     5 
     6 int main(int argc, char const *argv[])
     7 {
     8     memset(dp, 0, sizeof(dp));
     9     for(int i = 0; i < 1000; i++) {
    10         dp[0][i] = 1;
    11     }
    12     for(int i = 1; i <= 102; i++) {
    13         for(int j = 1; j <= 102; j++) {
    14             if(j <= i) {
    15                 dp[i][j] = dp[i][j-1] + dp[i-j][j];
    16             }
    17             else {
    18                 dp[i][j] = dp[i][j-1];
    19             }
    20             
    21         }
    22     }
    23     while(scanf("%d",&n) != EOF) {
    24         printf("%d
    ",dp[n][n]);
    25     }
    26     return 0;
    27 }
    28 /*
    29 dp[3][1] = dp[3][0] + dp[2][1] = 1;
    30 dp[3][2] = dp[3][1] + dp[1][2] = 1 + 1 = 2
    31 dp[3][3] = dp[3][2] + dp[0][3] = 2 + 1 = 3
    32 */

    另一种办法是母函数法

  • 相关阅读:
    The Tamworth Two chapter 2.4
    USACO Controlling Companies chapter 2.3 已跪
    非递归快排
    链表二路归并
    Money Systems chapter 2.3 dp
    #pragma pack与sizeof union
    快慢指针
    12
    11
    10
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5814671.html
Copyright © 2011-2022 走看看