滴滴笔试==!
没有数据范围。
我做**的题哦。
做题全靠猜。
第一题,不说了,编辑距离,dp,改一改...注意一点细节.. (其实是没保存代码)
第二题,球,组合数学, dp
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <stdlib.h> using namespace std; const int maxn = 1e5+123; int idx(char c) { return c - '0'; } typedef long long ll; map<int,int>mp; vector<int>g[maxn]; ll dp[50][500]; ll C[500][500]; ll A[500]; ll a[3]; int main(int argc, char const *argv[]) { int n; C[0][0] = 1; for (int i = 1; i < 500; i++) { C[i][0] = 1; for (int j = 1; j < i; j++) { C[i][j] = (C[i-1][j-1] + C[i-1][j]); } C[i][i] = 1; } A[0] = A[1] = 1; for (int i = 2;i < 500; i++) { A[i] = (A[i-1] * i); } n = 3; for (int i = 1; i <= n; i++) scanf("%d",&a[i]); dp[1][a[1]-1] = 1; ll sum = a[1]; for (int i = 2; i <= n; i++) { for (int j = 0; j < sum; j++) { for (int k = 1; k <= a[i]; k++) { for(int u = 0; u <= j && u <= k; u++) { dp[i][j-u+a[i]-1-(k-1)]=(dp[i][j-u+a[i]-k] + (((dp[i-1][j]*C[j][u])*C[sum+1-j][k-u])*C[a[i]-1][k-1])); } } } sum += a[i]; } ll ans = dp[n][0]; if(ans <= 0) std::cout << 0 << '\n'; else std::cout << ans << '\n'; return 0; } `#滴滴##笔试题目##题解#