「PKUWC2018」Slay the Spire

国际惯例不放题干

扯淡

其实题目翻译过来是杀戮尖塔,某steam上的卡牌游戏,我也曾热衷刷榜

题解

首先题目中要求的期望是假期望,结合题目中所给的阶乘就可以看出这其实是从$2*n$张牌中选择$m$张牌使用,并且所有情况都取最大值时的和

首先排序贪心最大

再说一个非常显然的结论,有强化牌就用,强化牌上数大于2,所以打出强化牌一定收益>=比打出一张攻击牌带来(保证最后一定要出至少一张攻击牌就行)

例如  你有强化牌  2 2 攻击牌 4 4 限制出2张

那么你先打一张2再打一张4和 先打4 再打4 收益一样  

那么如果强化牌比k张要小,那么要把所有强化牌都用了,最后打输出.如果强化牌比k还要大,那么最后留一张攻击牌打出来就行了

我们可以假设$F(i,j)$表示你有i张强化牌时打出j张时收益,$G(i,j)$表示你有i张攻击牌时打出j张时收益

那么最后答案就是

$\sum\limits_{i=0}^{k-1} F(i,i)*G(m-i,k-i)+\sum\limits_{i=k}^{k=min(n,m)} F(i,k-1)*G(m-i,1)$

那么我们现在的任务就是快速求出来F和G

考虑直接求非常难求,我们这时一般要开几个别的数组

首先开$f[i][j]$ $g[i][j]$表示当你抽到i张牌必打第i张一共打了j张时收益

那么可以推出来$f[i][j]=w_i\times \sum f[l][j-1]$和$g[i][j]=C_{i-1}^{j-1}w_i + \sum g[l][j-1]$ (这里的组合数表示一共有$C_{i-1}^{j-1}$种方式转移过来,每种转移都要加一个w)

然后得到$F(i,j)=\sum_{l=j}^{n} C_{n-l}^{i-j} f[l][j]$

解释一下 F可以从l中使用j张(这j张都是大牌)再从剩余n-l中选择i-j张不打共同构成F的i张打了j张

G同理得到$G(i,j)=\sum{l=j}^{n} C_{n-l}^{i-j} g[i][j]$

然后转移就完了

本题稍卡常

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1510
#define py printf("f**k\n")
#define mod 998244353
ll n,m,t,k,ans=0,f[1510][1510],g[1510][1510],C[3010][3010],sum1[A],sum2[A],wg[A],wq[A];
inline ll read()
{ll x=0; char c=getchar();while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x;
}
ll gcd(ll x,ll y){if(y==0) return x;return gcd(y,x%y);
}
inline ll F(ll i,ll j){ll r=0;for(ll l=j;l<=n;l++){r=(r+C[n-l][i-j]*f[l][j]%mod)%mod;//表示含义为首先从前l张选出j张再从n-l中选出l-j张
    }return r;
}
inline bool cmp(const ll & a,const ll & b){return a>b;
}
inline ll G(ll i,ll j){ll r=0;for(ll l=j;l<=n;l++){r=(r+C[n-l][i-j]*g[l][j]%mod)%mod;//含义同上
    }return r;
}
inline void re(){memset(sum1,0,sizeof(sum1));memset(sum2,0,sizeof(sum2));
}
inline void init(){n=read(),m=read(),k=read();f[0][0]=1;for(ll i=1;i<=n;i++)wq[i]=read();sort(wq+1,wq+n+1,cmp);for(ll i=1;i<=n;i++)wg[i]=read();sort(wg+1,wg+n+1,cmp);for(ll i=1;i<=n;i++)f[i][1]=wq[i],g[i][1]=wg[i];for(ll i=1;i<=n;i++){for(ll j=2;j<=i;j++){sum1[j-1]=(sum1[j-1]+f[i-1][j-1])%mod;f[i][j]=wq[i]*sum1[j-1]%mod;sum2[j-1]=(sum2[j-1]+g[i-1][j-1])%mod;g[i][j]=(C[i-1][j-1]*wg[i]+(sum2[j-1]))%mod;}}
/*    for(ll i=1;i<=n;i++)for(ll j=1;j<=i;j++)printf("f[%lld][%lld]=%lld g[%lld][%lld]=%lld\n",i,j,f[i][j],i,j,g[i][j]);
*/}
inline void work(){ll ans=0;for(ll i=min(n,m);i>=0;i--){if(i<k)ans=(ans+F(i,i)*G(m-i,k-i)%mod)%mod/*,printf("F=%lld G=%lld\n",F(i,i),G(m-i,k-i))*/;else ans=(ans+F(i,k-1)*G(m-i,1)%mod)%mod/*,printf("F=%lld G=%lld\n",F(i,k-1),G(m-i,1))*/;
//        printf("ans=%lld\n",ans);
    }printf("%lld\n",ans);
}
int main()
{for(ll i=0;i<=3000;i++)C[i][0]=1;for(ll i=1;i<=3000;i++)for(ll j=1;j<=i;j++)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;t=read();while(t--){re();init();work();}
}

 

转载于:https://www.cnblogs.com/znsbc-13/p/11238425.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java lambda使用_在Java 8 Lambda上使用Apache Commons Functor功能接口

java lambda使用Apache Commons Functor &#xff08;以下称为[functor]&#xff09;是一个Apache Commons组件&#xff0c;它提供功能性的编程API和已实现的几种模式&#xff08;访问者&#xff0c;生成器&#xff0c;聚合器等&#xff09;。 Java 8具有几个不错的新功能&…

基于svm图像分类C语言,基于SVM的图像分类算法与实现.PDF

, ( ) 计算机工程与应用40 ComputerEngineeringandApplications基于SVM的图像分类算法与实现张淑雅 赵一鸣 李均利, ,, ,ZHANGShu-yaZHAOYi-mingLIJun-li宁波大学 数字技术与应用软件研究所 浙江 宁波, 315211, , , ,InstituteofDSPandSoftwareTechniquesNingboUniversityNingb…

前端ui框架

http://frozenui.github.io/components.html#progress rozenUI是什么 Frozen UI是一个开源的简单易用&#xff0c;轻量快捷的移动端UI框架。基于手Q样式规范&#xff0c;选取最常用的组件&#xff0c; 做成手Q公用离线包减少请求&#xff0c;升级方式友好&#xff0c;文档完善…

德国留学语言c1,德国留学申请,关于语言

申请德国大学并不容易&#xff0c;语言是一大关。对于申请德国大学的人来说&#xff0c;除国际课程和个别专业外&#xff0c;各大学对申请人德语学时要求一般都在800学时以上&#xff0c;目前比较权威的德语考试有TestDaf和DSH这两种类型。TestDaF&#xff1a;“外国学生申请大…

一个iOS表单框架-UFKit

效果&#xff1a; 使用&#xff1a; pod UFKit- (void)viewDidLoad {[super viewDidLoad];__block UFFormView *formView [UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {make.addSection([UFSection makeSection:^(UFSectionMaker * _Nonnull make) {make.ad…

c语言手写指针和乘号,C-学会使用指针(示例代码)

先说&#xff1a;唯手熟尔指针指针存储着一个内存空间的地址定义一个指针int a&#xff1b;int * p&#xff1b;定义一个指针&#xff0c;只需在变量前面加一个 * 号。这里的指针只能存储一个存放整数的内存空间的地址指针如何存储地址p &a;&叫取地址符。这样整形指针…

考后反思7.25

D1 考试时首先看的第一题&#xff0c;不会&#xff0c;然后看第二题&#xff0c;原题&#xff01;&#xff01;&#xff01;&#xff01; 第二题啥也没想&#xff0c;就只是打了一个tarjan判割点&#xff0c; 打完的时候有点慌&#xff0c;总觉得自己打错了什么&#xff0c;调了…

android getinstance 方法,Android中的'new Fragment()'和'Fragment.getInstance()'有什么区别?...

当我们片段添加到特定的布局&#xff0c;我们可以使用folloing码Fragment fragment new SampleFragment();FragmentManager fragmentManager getSupportFragmentManager();FragmentTransaction fragmentTransaction fragmentManager.beginTransaction();fragmentTransaction…

查找发布地图的 REST URL并查询相关信息

1、登录ArcGIS Server Manager 2、登录后&#xff0c;里面是以前自己发布的地图服务 3、点击自己发布的地图&#xff0c;然后按下功能选项&#xff0c;再点击箭头来找到URL 4、点击进去&#xff0c;分别能从红圈中找到相关的信息&#xff0c;分别为arcgis JavaScript&#xff0…

maven使用testng_使用Maven Failsafe和TestNG分别运行单元测试和集成测试

maven使用testng最近&#xff0c;对于我的新宠物项目&#xff0c;我决定我希望在标准mvn测试期间执行一些测试&#xff0c;而仅在不同阶段执行一些其他测试 &#xff0c;我们称其为集成阶段。 我在谷歌上搜索&#xff0c;似乎没有任何工作&#xff0c;因此在努力使安装工作顺利…

android webview 重定向 goback,Android WebView 网址重定向影响 goBack

我们在使用 Android 自带的控件 WebView 访问某网址的时候, 网址会通过某些方式进行重定向. 这时会出现一个问题.我们在使用 Android 自带的控件 WebView 访问某网址的时候, 网址会通过某些方式进行重定向. 这时会出现一个问题.如下所示:你想要在 『A网址』 中打开 『C网址』, …

android 仿qq it蓝豹,《IT蓝豹》listview实现各种版面设计功能

本项目主要listview实现各种版面设计功能&#xff0c;有实现列表的&#xff0c;gridview效果的&#xff0c;有混排效果的等等。自定义TwoWayView继承RecyclerView&#xff0c;通过TwoWayView去根据布局实现到底选择哪一个效果&#xff0c;本项目来自&#xff1a;https://github…

AWS:启动安装了APOC的Neo4j实例

安装Neo4j之后&#xff0c;我要做的第一件事就是安装APOC库 &#xff0c;但是我发现在AWS上旋转服务器时这是一个手动过程&#xff0c;所以我想简化一下。 已经有一个Neo4j AMI可以安装Neo4j 3.2.0 &#xff0c;我的同事Michael指出&#xff0c;我们可以通过编写脚本并将其作为…

NOIP模拟测试8「寿司」

考试时打的类似$n^2$暴力&#xff0c;然后炸了只有10分 后来验证我的算法伪了。 题解 显然你有一种解法&#xff0c;假设你要在一个B点断开将R分别移向最左 最右&#xff0c;这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个ans 这个题有一个很不显然的结论&#xff0…

glassfish hk2_使用GlassFish 3.1.2.2和Primefaces 3.4的JDBC领域和基于表单的身份验证

glassfish hk2我的博客上最受欢迎的帖子之一是有关JDBC安全领域和带有Primefaces的GlassFish上基于表单的身份验证的简短教程。 在收到有关它不再适用于最新的GlassFish 3.1.2.2的评论后&#xff0c;我认为可能是时候重新访问它并提出更新的版本了。 开始了&#xff1a; 制备 …

NOIP模拟测试8「匹配·回家」

匹配 哈希能A 水到爆炸 回家 事实上我做过一个原题&#xff0c;甚至比这个回家难的多&#xff0c;而且那个题多组询问必经点 然后我做一组询问就打炸了 大约就是删了很多东西&#xff0c;然后自己想的太简单了 直接统计了割点&#xff0c;懒得打lca和树上差分&#xff0c;懒得打…

将CloudWatch Logs与Cloudhub Mule集成

在此博客中&#xff0c;我将解释如何为您的Mule CloudHub应用程序启用AWS Cloudwatch日志 。 AWS提供了Cloudwatch Logs Services&#xff0c;以便您可以更好地管理日志。 它比松散便宜。 由于cloudhub会自动翻转超过100 MB的日志&#xff0c;因此我们需要一种机制来更有效地管…

android网络重试机制,okhttp源码解析(四):重试机制

前言这一篇我们分析okhttp的重试机制&#xff0c;一般如果网络请求失败&#xff0c;我们会考虑连续请求多次&#xff0c;增大网络请求成功的概率&#xff0c;那么okhttp是怎么实现这个功能的呢&#xff1f;正文首先还是回到之前的InterceptorChain&#xff1a;Response getResp…

构造入门

构造死磕 什么是构造 小学中学奥数先用数学解决再编程实现的构造题一般算法无法解决\(NOI\)难度\(PJ-\)代码量坑构造举例 CF743C Vladik and fractions 题目让我们构造一组数字,满足\(\frac{2}{n} \frac{1}{x} \frac{1}{y} \frac{1}{z}\)第一眼看到就想到听老师讲了半天才知…

王成录华为鸿蒙系统,华为手机销量仍在增长!华为王成录:手机会是鸿蒙OS系统的中心...

【天极网手机频道】由于制裁&#xff0c;华为遭到前所未有的断供&#xff0c;外界有不少声音都在担心华为手机出货量将会出现暴跌。不过昨日华为开发者大会举办期间&#xff0c;华为消费者业务软件部总裁王成录表示&#xff0c;华为手机销量仍在增长中。昨天的华为开发者大会&a…