zoukankan      html  css  js  c++  java
  • hdu 5185(DP)

    不错的一道dp题目,一开始想了一种N*N的dp,后面就一直想怎么优化,然后就一直都在坑中了。

    这题题解还是看早了,应该再多想会的,多换种表示状态的方法再想想。

    dp[i][j]=dp[i-j][j]+dp[i-j][j-1]  表示已经用了i并且最后一位为j的所有情况。

    dp[0][0]=1

    其中i<=50000,j<=320,算算负责度就可以了

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    
    #define MOD 1000000000
    int dp[50001][321];
    
    int main()
    {
        int tt=1;
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,m;
            scanf("%d%d",&n,&m);
            memset(dp,0,sizeof(dp));
            dp[0][0]=1;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=321;j++)
                {
                    if(i-j>=0)
                    {
                        dp[i][j]=dp[i-j][j]+dp[i-j][j-1];
                        dp[i][j]%=m;
                    }
                    else break;
                }
            printf("Case #%d: ",tt++);
            int ans=0;
            for(int i=1;i<=321;i++)
            {
                ans+=dp[n][i];
                ans%=m;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Gym
    Gym
    Gym
    Gym
    Gym
    hdu2586 LCA带边权的Targan算法
    bryce1010专题训练——LCA
    POJ1470 LCA (Targan离线)
    bryce1010专题训练——LCT&&树链剖分
    模板——2.7 欧拉函数
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/4336042.html
Copyright © 2011-2022 走看看