zoukankan      html  css  js  c++  java
  • 543A

    题意:现在要写m行代码,总共有n个文件,现在给出第i个文件每行会出现v[i]个bug,问你在bug少于b的条件下有多少种安排

    分析:定义dp[i][j][k],i个文件,用了j行代码,有k个bug

    状态转移为

        1.在第i个文件,不写代码   dp[i][j][k]=dp[i-1][j][k]  

        2.在第i个文件,写代码      dp[i][j][k]+=dp[i][j-1][k-v[i]]

    这题巧妙在于,既往i转移,又往j和k方向转移,这样我把它形容为二维动态规划

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int maxn=500+10;
    ll dp[maxn][maxn],num[maxn];
    int main()
    {
        ios::sync_with_stdio(false);
        int n,m,b,mod;
        cin>>n>>m>>b>>mod;
        for(int i=1;i<=n;i++)
            cin>>num[i];
        dp[0][0]=1;
        for(int i=1;i<=n;i++)
        {
            int v=num[i];
            for(int j=1;j<=m;j++)
                for(int k=v;k<=b;k++)
                    dp[k][j]=(dp[k][j]+dp[k-v][j-1])%mod;
        }
        ll ans=0;
        for(int i=0;i<=b;i++)
            ans=(ans+dp[i][m])%mod;
        cout<<ans<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/carcar/p/9939642.html
Copyright © 2011-2022 走看看