a_aii_1 2022-08-24 16:53 采纳率: 100%
浏览 66
已结题

求大家帮我解答一下这道动态规划题

现在有n种牌,第i种有ai张牌。

现在要出m张牌,可以从手牌里任意选择。出牌时同一种牌需要放在一起,且不同种类的牌需要按牌的种类编号从小到大摆放。

想知道一共有多少种出牌方式。对答案膜10^6 + 7的结果

想了很久还是不会

  • 写回答

1条回答 默认 最新

  • OsirisJian 2022-08-24 18:10
    关注

    一个标准的多重背包问题,

    
    #include <bits/stdc++.h>
    using namespace std;
    int n,m;//n种牌,出m张,根据n、m的大小开二维数组d[n+1][m+1] 
    //这里假设n小于100,m小于1000 
    int a[100],d[100][1000],s;//d[i][j]表示前i种牌出m张,一共多少种 
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++) cin>>a[i]; 
        d[0][0]=1;
        for(int i=1;i<=n;i++){
            d[i][0]=1;
            s+=a[i];//前i种牌一共s张 
            for(int j=1;j<=min(m,s);j++){//凑j张牌  //降维的话,这需要倒着做,参考01背包
                for(int k=0;k<=min(a[i],j);k++){//取k张i ,这是一个多重背包 
                    d[i][j]+=d[i-1][j-k];
                    d[i][j]%=1e6+7;
                } 
            }
        } 
        cout<<d[n][m]; //降维的话,倒着做。 
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月24日
  • 已采纳回答 8月24日
  • 创建了问题 8月24日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号