【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][ ...
随机推荐
- Hibernate类中集合的映射
1 pojo类集合属性的映射 在pojo类中定义集合属性. 1.1 List集合属性的映射 package org.guangsoft.pojo; import java.util.List; pu ...
- The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
出现这样的错误: error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your C ...
- iOS添加另一个控制器的时候要注意啊
ios的父控制器控制器和子控制器之间的注意点: " >> #warning 需要把新创建出来的控制器添加成子控制器 . 不然子控制器里面的子控件无法响应点击事件 " 一 ...
- Google140道面试题
FQ找来,可能历史比较悠久了,慢慢看. 原文连接:http://www.impactinterview.com/2009/10/140-google-interview-questions/ Goog ...
- java Http原生 Get 和Post 支持代理认证
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...
- openURL的使用方法:
openURL的使用方法: view plaincopy toclipboardprint? [[UIApplication sharedApplication] openURL:[NS ...
- HTML5 – 4.canvas
1.绘制矩形 2.绘制圆形 3.绘制文字 4.保存文件 什么是 Canvas? HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. < ...
- 重温WCF之WCF抛出异常的处理SOAP Fault(十二)
1.(服务端)抛出和(客户端)捕获SOAP Fault 当我们需要客户端获取到WCF服务端的抛出的异常的时候,使用FaultException类 WCF类库在System.ServiceModel命名 ...
- Jquery自定义图片上传插件
1 概述 编写后台网站程序大多数用到文件上传,可是传统的文件上传控件不是外观不够优雅,就是性能不太好看,翻阅众多文件上传控件的文章,发现可以这样去定义一个文件上传控件,实现的文件上传的效果图如下: 2 ...
- POJ1351 Number of Locks(数学)
截至写博客为止,貌似这是网上第一个采用数学公式来处理的. 网上的题解都是DFS或是动态规划,但感觉可以推公式直接用数学的方法处理,想了好久,终于推出公式. 题意:一个长度为n的由数字1,2,3,4 组 ...