[JZOJ6271] 2019.8.4【NOIP提高组A】锻造
题目
题目大意
武器的每个级别有固定的两种属性\(b_i\)和\(c_i\)
可以用\(a\)的代价得到一把\(0\)级的武器。
可以将\(x\)级武器和\(y=\max(x-1,0)\)级武器融合锻造,
有\(\frac{\min(b_y,c_x)}{c_x}\)的概率可以升级成\(x+1\)级武器。
反之降级成\(y\)级武器。
问得到\(n\)级武器的期望代价(模意义下)。
思考历程
一开始想了个特别简单的DP。
然后发现有后效性……
搞不出来,然后心态崩了……
看到\(p=0\)的情况(也就是除了\(i=0\)之外,其它时候的\(b_i\)和\(c_i\)都为\(1\),也就是百分百成功率)。
这样就可以特殊计算\(f_0\)和\(f_1\),后面的像斐波拉契数列一样转移就可以了。
正解
正解的DP是没有后效性的。
正解的DP的目光更加长远,我想到的只是转移了一步的,但是正解是转移了很多步的。
状态还是\(f_i\)表示造\(i\)级武器的期望代价。
设成功率为\(x\),则方程为\(f_i=f_{i-2}+f_{i-1}+(1-x)(f_i-f_{i-2})\)
前面半段是锻造的代价,后面是没有成功时的代价。
由于没有成功的时候还可以有\(i-2\)级的武器留下来,所以就在下一次锻造的时候将它的代价减去。
方程移项之后显然是没有后效性的。
然而这题卡时间。
比如要打\(O(n)\)求逆元,还有各种小常数优化。
代码
卡常数卡到极尽的代码
using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10000010
#define mo 998244353
int n,a;
int bx,by,cx,cy,p;
int inv[N],f[N];
int main(){
freopen("forging.in","r",stdin);
freopen("forging.out","w",stdout);
scanf("%d%d%d%d%d%d%d",&n,&a,&bx,&by,&cx,&cy,&p);
inv[1]=1;
for (register int i=2,k;i<=p;++i){
k=mo/i;
inv[i]=(long long)(mo-k)*inv[mo-i*k]%mo;
}
int b=by+1,c=cy+1;
f[0]=a;
f[1]=(f[0]+(long long)f[0]*(b>=c?1:(long long)inv[b]*c%mo))%mo;
for (register int i=2;i<=n;++i){
c=((long long)c*cx+cy)%p+1;
f[i]=(f[i-2]+(long long)f[i-1]*(b>=c?1:(long long)inv[b]*c%mo))%mo;
b=((long long)b*bx+by)%p+1;
}
printf("%d\n",f[n]);
return 0;
}
总结
做期望DP的时候,目光一定要长远,从而避免后效性。
[JZOJ6271] 2019.8.4【NOIP提高组A】锻造的更多相关文章
- NOIP提高组2004 合并果子题解
NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- 1043 方格取数 2000 noip 提高组
1043 方格取数 2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...
- [NOIP提高组2018]货币系统
[TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...
- NOIP提高组初赛难题总结
NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...
- 2018.12.30【NOIP提高组】模拟赛C组总结
2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- 2013 Noip提高组 Day2
3288积木大赛 正文 题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前 ...
- 2013 Noip提高组 Day1
3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description ...
随机推荐
- MyEclipse中最常用的快捷键大全
1. [ALT+/] 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ALT+/]快捷键带来的好处吧. 2. [C ...
- DFS问题举例:N个整数选k个使其和为x
N个整数选k个使其和为x,若有多个方案,选择元素平方和最大的一个 #include<cstdio> #include<cmath> #include<cstring> ...
- POJ 3259 Wormholes Bellman题解
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- .Net平台调用の初识
前言 工作过程中难免遇到混合编程,现在我们要谈的是C#和c++语言的编程.C#要调用C++的库目前可选主要有两种方式:Com技术和平台调用(P/Invoke).现在我们要谈的是P/Invoke技术. ...
- vmstat - 报告虚拟内存的统计信息
总览 vmstat [-n] [延时[次数]] vmstat [-V] 描述 vmstat 对系统的进程情况.内存使用情况.交换页和 I/O 块使用情况.中断以及 CPU 使用情况进行统计并报告相应的 ...
- android是32-bit系统还是64-bit系统
转自:http://www.cnblogs.com/pengwang/archive/2013/03/11/2954496.html 电脑CPU分32位和64位,这个我们都知道.用了这么长时间的and ...
- H5在js中向指定的元素添加样式
今天在做一个按钮的功能控制,点击之后,要根据判断条件,修改按钮的样式,然后就发现了一个巨好用的方法, <button type="button" id="btn_A ...
- CSIC_716_20191204【网络编程 OSI 七层结构】
软件开发架构 C/S架构: Client: 客户端 Server: 服务端 比如: 微信客户端.QQ客户端等... 优点: - 软件的使用稳定 - 节省网络资源 缺点: - 安装麻烦,用户体验差 - ...
- P1487 失落的成绩单
P1487 失落的成绩单a[i]=a[i-2]-2.0*a[i-1]+2.0*d;a[2]越大,a[3]越小a[3]越大,a[4]越小所以a[2]越大,a[4]越大,a[3]越小就有了单调性,分奇偶进 ...
- 解决MySQL登录密码正确却提示错误-1045的方法
MySQL密码正确却无法本地登录-1045 Access denied for user 'root'@'localhost' (using password:YES MySQL密码正确却无法本地登录 ...