zoukankan      html  css  js  c++  java
  • hdu 1028 Ignatius and the Princess III(整数划分)

    题目链接

    经典DP 整数划分问题 用动态规划递推

    设dp[i][j]表示拆分数i,最大的那么数字不超过j的方案数。

    第一种是最后一个数不超过j-1,此时方案数为dp[i][j-1],否则最后一个数字刚好是j,此时的方案数是dp[i-j][j]。

    注意一些边界的情况。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <string>
     5 #include <algorithm>
     6 using namespace std;
     7 #define maxn 130
     8 int dp[130][130];
     9 void init(){
    10     memset(dp, 0, sizeof(dp));
    11     for(int i = 0; i <= 125; i++){
    12         dp[0][i] = 1;  //0
    13         dp[i][1] = 1;  //都拆分为1 
    14         dp[1][i] = 1; 
    15     }
    16     for(int i = 2; i <= 125; i++){
    17         for(int j = 2; j <= 125; j++){
    18             if(j<=i)dp[i][j] = dp[i][j-1] + dp[i-j][j];
    19             else dp[i][j] = dp[i][i];
    20         }
    21     }
    22 }
    23 int main(){
    24     int N;
    25     init();
    26     while(scanf("%d", &N) != EOF){
    27         cout<<dp[N][N]<<endl;
    28     }
    29     return 0;
    30 }
  • 相关阅读:
    [CF598E] Chocolate Bar
    [CF629D] Babaei and Birthday Cake
    [CF961D] Pair Of Lines
    [CF468B] Two Sets
    [CF767C] Garland
    [CF864E] Fire
    [CF578C] Weakness and Poorness
    [CF555B] Case of Fugitive
    [CF118E] Bertown roads
    [CF1301D] Time to Run
  • 原文地址:https://www.cnblogs.com/titicia/p/4343121.html
Copyright © 2011-2022 走看看