【bzoj4513】储能表【数位DP】
本来是想去学数位DP,作死挑了这道题,爆炸。。。
听说正确姿势应该是去做bzoj4521【手机】,听说迪克们当场都A了,Orz
然后对于4513,我只想说,一、脸、懵、逼
首先,我是无论如何都无法想到f[i][x][y][z]精妙的表示方式的
……讲不下去了,搬来罗爷爷的blog救场http://yyhslyz.is-programmer.com/posts/199294.html
好吧我承认这道题我完全没理解。。。。
代码可以看lych的blog.
不过其中又get了一个bug,原来<的优先级大于^,2333
-----------------------------------------------
首先,数位dp是啥.
它一般与二进制,异或有关,有些比较容易看出来,有些并不.
解决问题的核心思想就是逐位确定.
我还是想再说一遍,感觉自己做dp题还是没有任何的长进,可能弱菜看过的题太少.
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 105
#define ad add
#define ll long long
using namespace std;
ll n,m,k,T; ll p,lenm,lenn,lenk,tmp,len,a[N],b[N],c[N],f[N][][][],g[N][][][],bin[N];
void add(ll &x,ll y)
{
x+=y;if(x>=p)x-=p;
}
ll max(ll a,ll b)
{
if(a>b) return a;else return b;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld%lld",&m,&n,&k,&p);
memset(a,,,,sizeof(c));
lenm=;)a[++lenm]=m&;
lenn=;)b[++lenn]=n&;
lenk=;)c[++lenk]=k&;
len=max(max(lenm,lenn),lenk);
bin[]=;;i<=len;i++)bin[i]=(bin[i-]<<)%p;
memset(f,,,sizeof(g));
; x<; x++) ; y<; y++) ; z<; z++)
; u<((x)?:a[]); u++)
; v<((y)?:b[]); v++)
] || z){
ad(f[][x][y][z],((u^v)-c[]+p)%p);
ad(g[][x][y][z],);
}
; i<=len; i++)
; x<; x++) ; y<; y++) ; z<; z++)
; u<=max(x,a[i]); u++)
; v<=max(y,b[i]); v++)
if ((u^v)>=c[i] || z){
int j=x|(u<a[i]),k=y|(v<b[i]),l=z|((u^v)>c[i]);
tmp=(ll)g[i-][j][k][l]*((u^v)-c[i])*bin[i-]%p;
) tmp+=p; ad(tmp,f[i-][j][k][l]);
ad(f[i][x][y][z],tmp);
ad(g[i][x][y][z],g[i-][j][k][l]);
}
printf(][][]);
}
}
2016/06/01
[bzoj4521]
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define mo 998244353
using namespace std;
ll x,y,n,dp[][][][][][][];
];
ll solve(ll x)
{
n=;int p,q,r;
while(x)
{
a[++n]=x%;x/=;
}
);
;i<=n/;i++)swap(a[i],a[n-i+]);
memset(dp,,sizeof(dp));
;i<a[];i++)
;j<=;j++){
||j==)p=;;
||j==)q=;;
dp[][i][j][p][q][][]=;
}
;j<a[];j++){
]==||j==)p=;;
]==||j==)q=;;
dp[][a[]][j][p][q][][]=;
}
]==||a[]==)p=;;
]==||a[]==)q=;;
dp[][a[]][a[]][p][q][][]=;
;i<n;i++)
;j<=;j++)
;k<=;k++)
;I<=;I++)
;J<=;J++)
;K<=;K++)
;l<=;l++){
)p=;else p=I;
)q=;else q=J;
;else r=K;
dp[i+][k][l][p][q][r][]+=dp[i][j][k][I][J][K][];
])dp[i+][k][l][p][q][r][]+=dp[i][j][k][I][J][K][];
])dp[i+][k][l][p][q][r][]+=dp[i][j][k][I][J][K][];
}
ll ans=;
;i<=;i++)
;j<=;j++)
;k<=;k++)
ans+=dp[n][i][j][][][][k]+dp[n][i][j][][][][k]+dp[n][i][j][][][][k];
return ans;
}
int main()
{
scanf("%lld%lld",&x,&y);
printf());
}
【bzoj4513】储能表【数位DP】的更多相关文章
- 【BZOJ4513】[Sdoi2016]储能表 数位DP
[BZOJ4513][Sdoi2016]储能表 Description 有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号.每个格子都储存着能量.最初,第 i 行第 ...
- BZOJ4513: [Sdoi2016]储能表(数位dp)
题意 题目链接 Sol 一点思路都没有,只会暴力,没想到标算是数位dp??Orz 首先答案可以分成两部分来统计 设 \[ f_{i,j}= \begin{aligned} i\oplus j & ...
- [bzoj4513][SDOI2016]储能表——数位dp
题目大意 求 \[\sum_{i = 0}^{n-1}\sum_{j=0}^{m-1} max((i\ xor\ j)\ -\ k,\ 0)\ mod\ p\] 题解 首先,开始并没有看出来这是数位d ...
- BZOJ 4513: [Sdoi2016]储能表 [数位DP !]
4513: [Sdoi2016]储能表 题意:求\[ \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} max((i\oplus j)-k,0) \] 写出来好开心啊...虽然思路不完 ...
- BZOJ.4513.[SDOI2016]储能表(数位DP)
BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...
- [SDOI2016]储能表——数位DP
挺隐蔽的数位DP.少见 其实减到0不减了挺难处理.....然后就懵了. 其实换个思路: xor小于k的哪些都没了, 只要留下(i^j)大于等于k的那些数的和以及个数, 和-个数*k就是答案 数位DP即 ...
- 4513: [Sdoi2016]储能表 数位DP
国际惯例的题面: 听说这题的正解是找什么规律,数位DP是暴力......好的,我就写暴力了QAQ.我们令f[i][la][lb][lc]表示二进制从高到低考虑位数为i(最低位为1),是否顶n上界,是否 ...
- bzoj4513 储能表
求 $\sum\limits_{i=0}^{n-1} \sum\limits_{j=0}^{m-1} max((x \space xor \space j) - k,0)$ ,膜 $p$ $n,m \ ...
- BZOJ4513 SDOI2016储能表(数位dp)
如果n.m.k都是2的幂次方,答案非常好统计.于是容易想到数位dp,考虑每一位是否卡限制即可,即设f[i][0/1][0/1][0/1]为第i位是/否卡n.m.k的限制时,之前的位的总贡献:g[i][ ...
随机推荐
- ZendStudio如何汉化
点击工具栏的help,看图 点击 Install New Sofaware... 看图 然后.... 在地址(12.0的版本):http://download.eclipse.org/techno ...
- IIS7.0提示---无法识别的属性“targetFramework”。请注意属性名称区分大小写。
当我把我做的网站放在IIS7.0的服务器上的时候,浏览时提示这个错误信息 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消 ...
- java链式编程设计
一般情况下,对一个类的实例和操作,是采用这种方法进行的: Channel channel = new Channel(); channel.queueDeclare(QUEUE_NAME, true, ...
- 网页(HTML)中的特殊字符
网页(HTML)中的特殊字符 (1)一般来说,在HTML中,一个特殊字符有两种表达方式,一种称作数字参考,一种称作实体参考. 所谓数字参考,就是用数字来表示文档中的特殊字符,通常由前缀“&#” ...
- Android 添加cookie
/** * 添加cookie * * @param url */ private void setCookie(String url) { // 获取uid String uid = UserData ...
- Feature hashing相关 - 1
考虑典型的文本分类,一个经典的方法就是 分词,扫描所有特征,建立特征词典 重新扫描所有特征,利用特征词典将特征映射到特征空间编号 得到特征向量 学习参数 w 存储学习参数 w , 存储特征映射 ...
- Netty网络编程之NIO概览与简单应用
>>关于NIO Java NIO即Java Non-blocking IO(Java非阻塞I/O),是Jdk1.4之后增加的一套操作I/O工具包,又被叫做Java New IO. (1)R ...
- Delphi按下F1不能出现帮助文档的解决方法
不光是Delphi,Windows里面所有的之所以无法打开.hlp帮助文档的问题都可以使用以下的方法来解决 问题:情况是这样的,不是打不开hlp帮助文档,按F1出现的是Windows的帮助.而Delp ...
- EF环境搭建碰到的问题
研究EF Code Frist安装Entity Framework的时候,遇到了一些问题,下面就描述一下这些问题,顺便附上问题的解决办法. 1.Nuget安装EF的时候,一直报错,解决的办法是,卸载N ...
- Oracle锁定和解锁用户的命令
转:http://database.51cto.com/art/200910/158576.htm 在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用 ...