阿里 3.17 笔试

1、第一题:
n副扑克,张数为m,大小为1~m,每幅扑克抽一张,求和恰好为k的组合数,结果对10e9+7取余数。
剑指offer:骰子点数
代码:
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int mod=1000000007;
    int t;
    cin>>t;
    while(t--){
        int n,m,k;
        cin>>n>>m>>k;
        vector<vector<long> > dp(n+1,vector<long>(n*m+1,0));
        for(int i=1;i<=m;i++){
            dp[1][i]=1;
        }
        for(int i=1;i<=n;i++){
            for(int j=i;j<=i*m;j++){
                for(int k=1;k<=m;k++){
                    if(j-k<=0){
                        break;
                    }
                    dp[i][j]+=dp[i-1][j-k];
                }
            }
        }
        int ret=dp[n][k]%mod;
        cout<<ret<<endl;
    }
    return 0;
} 
2、第二题


#笔试题目##阿里巴巴#
全部评论
第二天用两个multiset就搞定了吧
点赞 回复
分享
发布于 2021-03-18 12:17

相关推荐

3 14 评论
分享
牛客网
牛客企业服务