首页 > 其他分享 >CF479E Riding in a Lift

CF479E Riding in a Lift

时间:2023-08-15 19:14:19浏览次数:37  
标签:CF479E int sum long Lift Riding 5050 dp Mod

题目大意

一栋楼有 \(n\) 层,初始位置在 \(a\) 层,你可以移动到的 \(y\) 层满足 \(\left|x-y\right|<\left|x-b\right|\)。不可以走到 \(b\) 层或留在原地,问一共走 \(k\) 次,有多少种走法。

思路

考虑简单的 DP。

记 \(dp_{i,j}\) 表示走到第 \(i\) 层,走了 \(j\) 次的方案数,\(l,r\) 分别是能够走到第 \(i\) 层的下界和上界,显然有:

\[dp_{i,j}=\sum_{k=l}^{r}dp_{k,j-1} \left[k \neq i \right] \]

这个时间复杂度肯定爆炸,所以考虑前缀和优化。

记 $$\operatorname{sum}{i,j}=\sum^i dp_{k,j}$$
这样我们刚才的转移方程就可以变成这样:

\[dp_{i,j}=\operatorname{sum}_{r,j-1}-\operatorname{sum}_{l-1,j-1}-dp_{i,j-1} \]

时间复杂度没问题了。

考虑空间,这道题需要开 long long,如果开两个二维的 long long 数组会炸空间。但由于本题有取模,我们可以考虑在计算过程中将变量转为 long long

也可以选择滚动数组,观察状态转移方程,显然走 \(j\) 次的方案数只与走 \(j-1\) 次的方案数有关,可以滚掉,实测空间不到 1MB。

Code

#include <bits/stdc++.h>

using namespace std;

const int Mod = 1e9 + 7;

int n,k,a,b;

int dp[5050][5050],sum[5050][5050];
// dp[i][j]:走到 i 用了 j 步的方案数 
// sum:前缀和优化 

signed main() {
    cin >> n >> a >> b >> k;
    if(a > b) {
        n -= b;
        a -= b;
    }
    else {
        a = b - a;
        n = b - 1;
    }
    // 只能在 B 层的一侧活动 
    // 可以直接把 B 层当做 0 层,方便计算 
    dp[a][0] = 1;
    for(int i = a;i <= n; i++)
        sum[i][0] = 1;
    for(int i = 1;i <= k; i++) {
        for(int j = 1;j <= n; j++) 
            dp[j][i] = ((long long)sum[n][i - 1] - (long long)sum[j >> 1][i - 1] - (long long)dp[j][i - 1] + 2ll * Mod) % Mod;
        for(int j = 1;j <= n; j++) 
            sum[j][i] = ((long long)sum[j - 1][i] + (long long)dp[j][i]) % Mod;
    }
    cout << sum[n][k];
    return 0;
}

标签:CF479E,int,sum,long,Lift,Riding,5050,dp,Mod
From: https://www.cnblogs.com/baijian0212/p/solution-cf479e.html

相关文章

  • Lifting the Stone
    Smiling&Weeping----繁花落尽,我心中仍有花落的声音  一朵,一朵,在无人的山间轻轻飘落题目链接:1385--LiftingtheStone(poj.org)思路:将多边形三角剖分,计算出每个三角形的重心,三角形的重心是顶......
  • Uplift Model介绍
    背景CTR、CVR模型建模的是预估看过广告之后的点击率和转化率,称为响应模型(responsemodel),建模的是相关性,但是缺点是没法区分这个点击转化中有多少是广告带来UpliftModel是估计用户因为广告而购买的概率,这是一个因果推断的问题,建模的是营销带来的增量Reponsemodel:P(Y=1∣......
  • [React Typescript] Overriding and Removing Component Props
    UsingOmitimport{ComponentProps}from'react';import{Equal,Expect}from'../helpers/type-utils';exportconstInput=(props:Omit<ComponentProps<'input'>,'onChange'>&{onChange:......
  • 风控模型指标全解:KS、LIFT、GINI等
    目录GiniKS值LIFT提升度参考资料实习接触到的数据大多来自于金融公司,这类模型关注风险,目的是降低风险而使得在风险和收益的博弈中最大化利润。模型评价指标不局限于准确率等常规指标,往往引入了更复杂的指标衡量模型的效果。以下介绍风控场景下常见的模型评价指标。数据含义模型......
  • Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型|附代
    原文链接:http://tecdat.cn/?p=27058最近我们被客户要求撰写关于因果推断与增量的研究报告,包括一些图形和统计输出。使用ML进行提升建模和因果推理Python包提供了一套使用基于最近研究的机器学习算法的提升建模和因果推理方法。允许用户根据实验或观察数据估计条件平均处理效......
  • A strange lift HDU - 1548 (BFS)
    题意:第i个火车站都有一个数字Ki(0≤Ki≤N),火车在第i站只能前进Ki站或后退Ki站。火车只能在第1站和第N站之间行驶。请问,从第a站到第b站最少需前进或后退......
  • airlift java rest 服务框架
    airlift是一个轻量,快速的javarest服务开发框架,属于trino的基础框架,airlift集成了不少轻量的工具包同时包含了不少不错的实践(比如配置管理,组件生命周期管理,http客户端,......
  • 使用provisio-maven-plugin+ airlift launcher 开发类似trino 的运行包
    如果运行过trino或者presto会发现比较方便,配置放的特别清晰,而且包含了方便的cli工具,实际上trino或者presto内部也是基于了provisio-maven-plugin+airliftlauncher......
  • airlift 简单试用
    airlift使用简单,而且周边集成也不少,只是官方文档比较少,使用最多的也是trino以及presto中,trino代码基于airlift框架的开发代码看起来是很简洁的项目结构 ......
  • airlift java rest 服务框架
    airlift是一个轻量,快速的javarest服务开发框架,属于trino的基础框架,airlift集成了不少轻量的工具包同时包含了不少不错的实践(比如配置管理,组件生命周期管理,http客户端......