Two Exams(ABC 238 F)
题目大意
有个人参加两场比赛,第个人在第一场比赛中的排名是,在第二场比赛中的排名是,现在要求你选择个人,要求被选择的人和没有被选择的人,满足或,问有多少种选择的方法,答案对取模。
思路
这题记得寒假的时候还做过,还看过大佬的博客,然后今天又做了一遍发现还是不会,悲。所以写一篇博客,希望下次遇到能秒。这题的话首先肯定能想到,我们先对进行排序,就能消除对答案的影响,然后再设为前个人,选择个人,其中最小的没被选择的排名为的方案数。然后考虑转移:
然后这道题就做完啦
代码
#include<bits/stdc++.h> using namespace std; struct score { int a,b; bool operator<(const score& s)const { return a<s.a; } }a[305]; long long dp[305][305][305]; long long mod=998244353; int main() { int n,k; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++)scanf("%d",&a[i].a); for(int i=1;i<=n;i++)scanf("%d",&a[i].b); sort(a+1,a+n+1); dp[0][0][n+1]=1; for(int i=1;i<=n;i++) { for(int j=0;j<i;j++) { for(int l=1;l<=n+1;l++) { if(a[i].b<l)dp[i][j+1][l]=(dp[i][j+1][l]+dp[i-1][j][l])%mod; dp[i][j][min(l,a[i].b)]=(dp[i][j][min(l,a[i].b)]+dp[i-1][j][l])%mod; } } } long long ans=0; for(int i=1;i<=n+1;i++) { ans=(ans+dp[n][k][i])%mod; } printf("%lld\n",ans); return 0; }
__EOF__

本文作者:Jerry-Black
本文链接:https://www.cnblogs.com/Jerry-Black/p/16293957.html
关于博主:小蒟蒻一只( ̄^ ̄)ゞ
版权声明:转载请注明来源哟~ QAQ
声援博主:UP UP UP !!!
本文链接:https://www.cnblogs.com/Jerry-Black/p/16293957.html
关于博主:小蒟蒻一只( ̄^ ̄)ゞ
版权声明:转载请注明来源哟~ QAQ
声援博主:UP UP UP !!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)