博客
关于我
[牛客练习赛69] D. 火柴排队 多维dp+逆元+递推求排列组合
阅读量:334 次
发布时间:2019-03-04

本文共 1983 字,大约阅读时间需要 6 分钟。

??????????????????????????????

????

???????n???a?????????k??????????????d??????????????????????a_i < a_j???????a_i' < a_j'????

???????????????????????????????????????????????????????????

??????????????????????????dp[i][j][k]??i??????j????????k???i?????????

????????

  • ????????dp[i][j][0] = dp[i-1][j][0] + dp[i-1][j][1] * (a[i-1] + d ? a[i])
  • ???????dp[i][j][1] = dp[i-1][j-1][0] + dp[i-1][j-1][1]
  • ??????

    ???????????????????????????

    ????

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;typedef long long ll;const double PI = acos(-1.0);const double eps = 1e-6;const ll mod = 998244353;const int inf = 0x3f3f3f3f;const int maxn = 5000 + 10;void get_comb(int n) { c[0] = 1; for (int i = 1; i <= n; ++i) { c[i] = (n - i + 1) * c[i - 1] % mod * inv(i) % mod; }}ll inv(ll a) { return pow(a, mod - 2, mod);}void main() { ll n, d; scanf("%lld %lld", &n, &d); get_comb(n); vector
    a(n + 1); for (int i = 1; i <= n; ++i) { scanf("%lld", &a[i]); } sort(a + 1, a + n + 1); dp[1][1][1] = 1; dp[1][0][0] = 1; for (int i = 2; i <= n; ++i) { for (int j = 0; j <= i; ++j) { if ((i - 1) & 1) { dp[i & 1][j][0] = (dp[i - 1 & 1][j][0] + dp[i - 1 & 1][j][1] * (a[i - 1] + d <= a[i])) % mod; dp[i & 1][j][1] = (dp[i - 1 & 1][j - 1][1] + dp[i - 1 & 1][j - 1][0]) % mod; } else { dp[i & 1][j][0] = (dp[i - 1][j][0] + dp[i - 1][j][1] * (a[i - 1] + d <= a[i])) % mod; dp[i & 1][j][1] = (dp[i - 1][j - 1][1] + dp[i - 1][j - 1][0]) % mod; } } } for (int i = 1; i <= n; ++i) { ll ans = (dp[n & 1][i][0] + dp[n & 1][i][1]) % mod; ans = ans * pow(c[i], mod - 2, mod) % mod; ans = (ans + mod) % mod; printf("%lld\n", ans); }}

    ????

  • ??????????????????????????
  • ????????dp[1][0][0]?dp[1][1][1]????1?
  • ??????????????????????dp??
  • ????????k????????????????????????
  • ????????O(n^2)???????????????n=5000????

    转载地址:http://yqmh.baihongyu.com/

    你可能感兴趣的文章
    python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
    查看>>
    python3.6使用pickle序列化class
    查看>>
    python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
    查看>>
    Python3.6属性错误:模块‘;异步没有属性‘;运行‘;
    查看>>
    python3.6版本中的python-weka-wrapper安装失败,错误代码为%1
    查看>>
    Python3.7安装cv2踩过的坑
    查看>>
    python写txt文件
    查看>>
    python关于sorted排序函数详细解析 附实战代码(全)
    查看>>
    python3.8调用m文件,调用matlab
    查看>>
    python3.9新特性_Python 3.9 新特性速览
    查看>>
    Python3.x:遍历select下拉框获取value值
    查看>>
    python360百科_11月编程排行榜:Python超过Java成第二
    查看>>
    Python关于Paginator分页函数详细解析 附实战代码
    查看>>
    python3、ipython3、setup-tools、pip等环境搭建详细总结
    查看>>
    python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
    查看>>
    python3与django中@property详解
    查看>>
    python3中如何表示无穷大
    查看>>
    Python3中提示:no module named 'wxpy'
    查看>>
    python3中选择文件对话框的格式打开和保存图片
    查看>>
    python3为什么print永远都是地址_Python3 print 函数用法总结
    查看>>