当前位置: 首页 > news >正文

CF每日3题(1600)

省流:

  • 2129B 贪心找最少逆序对
  • 2128D dp找所有子数组LDS长度和
  • 2125D 概率dp

2129B 贪心 1600

在这里插入图片描述
参考题解
题意:给一组排序,保持原样或反转变成2n−pi2n-p_i2npi,让逆序对数量最小化

  • 排列pi≤np_i\leq npin,那么2n−pi≥n2n-p_i\geq n2npin
  • pip_ipi保持原样
    • 前面的数若j<i,pj>pij<i,p_j>p_ij<i,pj>pi,形成逆序对
    • 后面的逆序对会在之后的循环中计算
  • pip_ipi变成2n−pi2n-p_i2npi
    • 前面的数不会和2n−pi2n-p_i2npi逆序
    • 后面的数尽量反转,若i<j,pi<pj,2n−pi>2n−pj>pji<j,p_i<p_j,2n-p_i>2n-p_j>p_ji<j,pi<pj,2npi>2npj>pj
void solve(){int n;cin>>n;vector<int>p(n+1);forr(i,1,n)cin>>p[i];//O(n2)可接受int ans=0;forr(i,2,n){int pre=0,suf=0;forr(j,1,i-1)pre+=(p[j]>p[i]);//本次不反转forr(j,i+1,n)suf+=(p[j]>p[i]);//本次反转 后面的尽量都要反转以避免产生逆序对 //但是如果j>i p[j]>p[i] p[j]<2n-p[j]<2n-p[i] 那就没办法了 一定会有逆序对ans+=min(pre,suf);//看反转还是不反转比较好}cout<<ans<<endl;
}

2128D dp 1600

在这里插入图片描述
在这里插入图片描述
题意:找所有子数组(数组连续一段)中最大LDS长度和
dp[i][j]dp[i][j]dp[i][j]是以pip_ipi为结尾,长度为jjj的子数组(j≤i)(j\leq i)(ji)

  • pi−1>pip_{i-1}>p_ipi1>pi,形成LDS,dp[i][j]=dp[i−1][j−1]+1又dp[i]=∑j=1idp[i][j]=∑j=1idp[i−1][j−1]+i=dp[i−1]+idp[i]=dp[i−1]+idp[i][j]=dp[i-1][j-1]+1\\又dp[i]=\sum \limits_{j=1}^i dp[i][j]=\sum \limits_{j=1}^idp[i-1][j-1]+i=dp[i-1]+i\\dp[i]=dp[i-1]+idp[i][j]=dp[i1][j1]+1dp[i]=j=1idp[i][j]=j=1idp[i1][j1]+i=dp[i1]+idp[i]=dp[i1]+i
  • pi−1<pi,由题max(pi−2,pi−1)>pi,pi−2>pi>pi−1p_{i-1}<p_i,由题max(p_{i-2},p_{i-1})>p_i,p_{i-2}>p_i>p_{i-1}pi1<pi,由题max(pi2,pi1)>pi,pi2>pi>pi1,从pi−2p_{i-2}pi2转移过来dp[i][j]=dp[i−2][j−1]+1dp[i]=∑j=1idp[i][j]=(∑j=1idp[i−2][j−1]+i−1)+1=dp[i−1]+1dp[i][j]=dp[i-2][j-1]+1\\dp[i]=\sum \limits_{j=1}^i dp[i][j]=(\sum \limits_{j=1}^idp[i-2][j-1]+i-1)+1=dp[i-1]+1dp[i][j]=dp[i2][j1]+1dp[i]=j=1idp[i][j]=(j=1idp[i2][j1]+i1)+1=dp[i1]+1
void solve(){int n;cin>>n;vector<int>dp(n+1);vector<int>p(n+1);forr(i,1,n)cin>>p[i];dp[1]=1;forr(i,2,n){if(p[i]<p[i-1])dp[i]=i+dp[i-1];else dp[i]=dp[i-1]+1;}int sm=0;forr(i,1,n)sm+=dp[i];cout<<sm<<endl;
}

2125D 概率dp 数学 1600

在这里插入图片描述
参考题解
题意:找每个格子恰好被一条线段覆盖的概率

  • 恰好一条线段,其他不覆盖×一条覆盖
  • dp[ri]=dp[li−1]+probi∏(1−probothers)dp[r_i]=dp[l_i-1]+prob_i\prod(1-prob_{others})dp[ri]=dp[li1]+probi(1probothers)
  • 其他不覆盖概率的可以用前缀积得出
const int N=2e5+10,mod=998244353;
struct seg
{int l,r;int pro;
}a[N];
/* 
dp[i]以a[i].r结尾的答案
ex[i]a[i].r什么都不选的概率
*/
int dp[N],ex[N];
int qpow(int x,int a){int res=1;while (a){   if(a&1)res*=x,res%=mod;a>>=1;x*=x,x%=mod;}return res%mod;
}
int inv(int x){return qpow(x,mod-2)%mod;
}
void solve(){int n,m;cin>>n>>m;forr(i,0,m)ex[i]=1;forr(i,1,n){int p,q;cin>>a[i].l>>a[i].r>>p>>q;a[i].pro=p*inv(q)%mod;ex[a[i].l]=ex[a[i].l]*(1-a[i].pro+mod)%mod;}forr(i,1,m)ex[i]=ex[i]*ex[i-1]%mod;//前缀积 可用来求区间中什么都不选的概率sort(a+1,a+n+1,[](seg x,seg y){return x.l<y.l;});dp[0]=1;forr(i,1,n){int tp=dp[a[i].l-1];tp=tp*ex[a[i].r]%mod*inv(ex[a[i].l-1])%mod;//l~r什么都不覆盖的概率tp=tp*inv(1-a[i].pro+mod)%mod;//除了i线段其他什么都没有的概率tp=tp*a[i].pro%mod;//只覆盖i线段dp[a[i].r]=(dp[a[i].r]+tp)%mod;}// forr(i,1,m)cout<<dp[i]<<' ';cout<<endl;cout<<dp[m]<<endl;
}
http://www.dtcms.com/a/330185.html

相关文章:

  • element-ui 时间线(timeLine)内容分成左右两侧
  • npm run dev 的作用
  • Unity_2D动画
  • 游戏盾的安全作用
  • RK3568嵌入式音视频硬件编解码4K 60帧 rkmpp FFmpeg7.1 音视频开发
  • Celery+RabbitMQ+Redis
  • Traceroute命令使用大全:从原理到实战技巧
  • IPC Inter-Process Communication(进程间通信)
  • 2小时构建生产级AI项目:基于ViT的图像分类流水线(含数据清洗→模型解释→云API)(第十七章)
  • 基于Supervision工具库与YOLOv8模型的高效计算机视觉任务处理与实践
  • 1.Cursor快速入门与配置
  • Multisim的使用记录
  • GQA:从多头检查点训练广义多查询Transformer模型
  • 蒙以CourseMaker里面的录屏功能真的是完全免费的吗?
  • C#标签批量打印程序开发
  • Redis 键扫描优化:从 KEYS 到 SCAN 的优雅升级
  • Nginx Stream代理绕过网络隔离策略
  • 论文Review 激光SLAM VoxelMap | RAL 2022 港大MARS出品!| 经典平面特征体素激光SLAM
  • 第4节 Torchvision
  • MC0473连营阵图
  • 在线教程丨 Qwen-Image 刷新图像编辑 SOTA,实现精准中文渲染
  • Docker部署RAGFlow:开启Kibana查询ES数据指南
  • 《Linux基础知识-3》
  • C语言:指针(4)
  • QT(事件)
  • 网络安全合规6--服务器安全检测和防御技术
  • MyBatis针对MySQL模糊查询中特殊字符(%和_)的处理方案
  • BGE:智源研究院的通用嵌入模型家族——从文本到多模态的语义检索革命
  • 模型驱动的自动驾驶AI系统全生命周期安全保障
  • C++入门自学Day10-- Vector类的自实现