滴滴笔试==!

没有数据范围。
我做**的题哦。
做题全靠猜。

第一题,不说了,编辑距离,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;
}
`
#滴滴##笔试题目##题解#
全部评论
求解释第一题。。。我暴力解过了67。。。
点赞 回复 分享
发布于 2018-09-18 21:25
我第一个题是小球排序,一直是67%
点赞 回复 分享
发布于 2018-09-18 21:24
楼主是算法岗吗?
点赞 回复 分享
发布于 2018-09-18 21:23

相关推荐

牛客837006795号:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务