zoukankan      html  css  js  c++  java
  • poj 1664 放苹果 设定独立状态,动态规划

      神状态题。。。。经波神,旭神轮番普渡,方AC。。。道路崎岖啊。。。

      状态 dp( i, j )

      此题状态意义,要能区分重复。

      i 个苹果,使用 j 个盘子放置,不同方案数量。

      状态转移方程,从 当前是否有盘子空 来区分,这样就不会存在重复情况了。

        一,若存在空盘子,则可能分为1,2,3,。。。,J个, 但是状态 dp( i, j-1 )   J-1个盘子放置i个苹果,包含了2,3,。。,J-1个空的情况,所以此时等价于 dp( i, j-1 )

        二,若不存在空盘子,(此时要满足条件 i >= j ) , 那么 每一个盘子放一个苹果后,剩下 I - J 个苹果 放置在 J 个盘子上,则此时可能存在空盘,则转换成了 dp( i-j, j )

      所以 转移方程为

        dp(i, j ) = dp(i,j-1)+ dp(i-j,j)  // 第二个要满足 i >= j 

    解题代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    typedef long long LL;
    
    LL dp[15][15];
    
    int main()
    {
        int T, n, m;
        scanf("%d", &T);
        while( T-- )
        {
            scanf("%d%d", &n,&m);
            memset(dp,0,sizeof(dp));
            for(int i = 0; i <= n; i++)
                dp[0][i] = 1, dp[i][1] = 1;
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= m; j++)
                {
                    dp[i][j] = dp[i][j-1];
                    if( i >= j ) dp[i][j] += dp[i-j][j];
                }
            }
            printf("%lld\n", dp[n][m] );    
        }
        return 0;
    }
  • 相关阅读:
    少壮不努力,老大徒伤悲
    吾日三省吾身
    记录生活
    为人处世
    时间不等人
    博客两年记忆
    抬起头吧
    下一步计划
    寻找遗失的平静
    暑假第二十六测
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2857018.html
Copyright © 2011-2022 走看看