阿里 3.17 笔试
1、第一题:
n副扑克,张数为m,大小为1~m,每幅扑克抽一张,求和恰好为k的组合数,结果对10e9+7取余数。
剑指offer:骰子点数
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、第二题