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

Educational Codeforces Round 170 (Rated for Div. 2)

ABC 略

ABC 略

D

n较大,m较小,我们以m为研究对象枚举每个0的位置选择哪个属性,f[i][j]表示第i个0之前有j个选择X的最大收益。这样设计状态的好处是可以将非0部分的满足情况一段一段考虑,即两个0之间的数是否被满足仅有前面的0决定。f[i][j]=max(f[i-1][j],f[i-1][j-1])+这一个0到上一个0中<=j的正数和>=i-1-j的负数的个数。后者可以用前缀和维护小于这个数前缀和的数的个数。

#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=2e6+10;
int T,n,m,a[N],f[5010][5010],b[5010],cnt,ans,zz[N],ff[N],zzz[N],fff[N];
void init()
{cnt=ans=0;
}
void solve()
{cin>>n>>m;init();for(int i=1;i<=n;i++){cin>>a[i];if(a[i]==0) b[++cnt]=i,zz[i]=5001,ff[i]=5001;else if(a[i]<0) ff[i]=-a[i],zz[i]=5001;else zz[i]=a[i],ff[i]=5001;}b[++cnt]=n+1;for(int i=2;i<=cnt;i++){for(int j=0;j<=m;j++) fff[j]=zzz[j]=0;for(int j=b[i-1]+1;j<=b[i]-1;j++) fff[ff[j]]++,zzz[zz[j]]++;for(int j=2;j<=cnt;j++) fff[j]+=fff[j-1],zzz[j]+=zzz[j-1];for(int j=0;j<i;j++){f[i][j]=max(f[i-1][j],f[i-1][j-1])+fff[j]+zzz[i-1-j];}}for(int i=0;i<cnt;i++) ans=max(ans,f[cnt][i]);cout<<ans<<endl;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie();//cin>>T;T=1;while(T--) solve();
}

E

根据题意找到三个性质,在相同花色的牌相消后

1.花色为1的如果有剩余,只能是A

2.花色不为1的如果有剩余,只能是B

3.花色为1的A的剩余的和花色不为1的B的剩余的数量相同

我们只要算出花色为1 m张牌从0~m的剩余情况乘上2~n个花色中对应剩余的情况数取最大值即可。

f[i][j]代表花色为1的前i大的牌A比B多j张牌的方案数。因为相同花色下B打的牌A必须打出等级更高的,所以枚举i时,j非负。转移为f[i][j]=f[i-1][j-1]+f[i-1][j+1]分别代表等级为j的牌分为A还是B。

g[i][j]代表2~i个花色B比A多选j个的方案数,我们枚举i从2~n,枚举j从0到m,k从0到j,因为每个花色的j只能递增。g[i][j]=g[i][j]+g[i-1][k]*f[m][j-k].代表2~i-1层B比A多k个的方案数*第i层B新增的比A多出的j-k个的方案数,后者在第一步已经算出。

答案就是g[n][i]*f[m][i]的最大值

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+10,mod=998244353;
int T,n,m,f[N][N],g[N][N],ans;
void init()
{
}
void solve()
{cin>>n>>m;init();f[0][0]=1;for(int i=1;i<=m;i++){f[i][0]=f[i-1][1];for(int j=1;j<=m;j++){f[i][j]=(f[i-1][j-1]+f[i-1][j+1])%mod;}}g[1][0]=1;/*for(int i=2;i<=n;i++){for(int j=0;j<=m;j++){for(int k=j;k<=m;k++){g[i][k]=(g[i][k]+g[i-1][k-j]*f[m][j])%mod;}}}*/for(int i=2;i<=n;i++){for(int j=0;j<=m;j++){for(int k=0;k<=j;k++){g[i][j]=(g[i][j]+g[i-1][k]*f[m][j-k])%mod;}}}for(int i=0;i<=m;i++)ans=(ans+g[n][i]*f[m][i])%mod;cout<<ans<<endl;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie();//cin>>T;T=1;while(T--) solve();
}

http://www.dtcms.com/a/279012.html

相关文章:

  • 第十六章 STL(仿函数、 常用算法)
  • 如何在 Ubuntu 上安装 Microsoft Edge 浏览器?
  • Solid Edge多项目并行,浮动许可如何高效调度?
  • cpp减小可执行文件、动态库大小
  • 4.2TCP/IP
  • 什么是微服务?-核心思想:化整为零,各自为战
  • 单向链表、双向链表、栈、队列复习(7.14)
  • Windows 安装配置Claude Code
  • Java实现文件自动下载,XXL-Job定时任务中的HTTP文件下载最佳实践
  • C++-linux 7.文件IO(二)文件描述符、阻塞与非阻塞
  • .net天擎分钟降水数据统计
  • .NET控制台应用程序中防止程序立即退出
  • Flask服务器公外网访问,IPv6(亲测有效!!!!)
  • 网络编程(TCP连接)
  • .NET ExpandoObject 技术原理解析
  • LeetCode经典题解:206、两数之和(Two Sum)
  • OV-DINO:基于语言感知选择性融合的统一开放词汇检测
  • 深入解析ThreadLocal:线程隔离利器
  • C#自定义控件
  • c# 深度解析:实现一个通用配置管理功能,打造高并发、可扩展的配置管理神器
  • Typecho加密文章HTML结构自定义完全指南
  • 在 Windows 主机和 VMware 虚拟机中的 Ubuntu 系统之间实现复制粘贴,
  • Spring IoC 容器实战:从解耦到集成的 6 大核心应用场景
  • 【PTA数据结构 | C语言版】字符串插入操作(不限长)
  • 微前端框架深度对决:qiankun、micro-app、wujie 技术内幕与架构选型指南
  • Ubuntu-25.04 Wayland桌面环境安装Anaconda3之后无法启动anaconda-navigator问题解决
  • 如何降低AIGC的查重率?精选六个AIGC降重让论文更出色
  • Spring Boot项目结构解析:构建高效、清晰的代码框架
  • 【Python进阶】深度复制——deepcopy
  • STM32F1_Hal库学习EXTI