BZOJ 1867 [Noi1999]钉子和小球 DP
想状态和钉子的位置如何匹配想了半天。。。后来发现不是一样的吗$qwq$
思路:当然是$DP$啦
提交:>5次(以为无故$RE$,实则是先乘后除爆了$long\space long$)
题解:
若有钉子,左右各乘$\frac{1}{2}$转移,否则,向下两层直接转移。
对于分数,分别维护分子和分母,然后加起来的时候,记着一定要写成
up[i][j]=up[i][j]*(b/G)+a*(dn[i][j]/G); dn[i][j]=dn[i][j]*(b/G);
而非
up[i][j]=up[i][j]*b/G+a*dn[i][j]/G; dn[i][j]=dn[i][j]*b/G;
(好吧也是我傻$qwq$)
代码:
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define ull unsigned long long #define ll long long #define R register ll #define pause (for(R i=1;i<=10000000000;++i)) #define In freopen("NOIPAK++.in","r",stdin) #define Out freopen("out.out","w",stdout) namespace Fread { inline int g() {R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;if(ch==EOF) return EOF; do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix; } inline bool isempty(const char& ch) {return (ch<=36||ch>=127);} inline void gs(char* s) {register char ch; while(isempty(ch=getchar()));do *s++=ch; while(!isempty(ch=getchar())); } } using Fread::g; using Fread::gs; namespace Luitaryi { const int N=60; int n,m; ll up[N][N],dn[N][N]; bool w[N][N]; inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a; } inline void add(int i,int j,ll a,ll b) {R G=gcd(dn[i][j],b);up[i][j]=up[i][j]*(b/G)+a*(dn[i][j]/G);dn[i][j]=dn[i][j]*(b/G);G=gcd(up[i][j],dn[i][j]); if(G) up[i][j]/=G,dn[i][j]/=G; } inline void main() {n=g(),m=g()+1;for(R i=1;i<=n;++i) for(R j=1;j<=i;++j) { register char ch;while(ch=getchar(),ch!='*'&&ch!='.'); w[i][j]=(ch=='*');up[i][j]=0,dn[i][j]=1;} for(R i=1;i<=n;++i) up[n+1][i]=0,dn[n+1][i]=1;up[1][1]=dn[1][1]=1;for(R i=1;i<=n;++i) for(R j=1;j<=i;++j) {R a=up[i][j],b=dn[i][j];if(w[i][j]) {if(a%2==0) a/=2; else b*=2;add(i+1,j,a,b),add(i+1,j+1,a,b);} else add(i+2,j+1,a,b);} printf("%lld/%lld",up[n+1][m],dn[n+1][m]);} } signed main() {Luitaryi::main(); }
2019.07.17
转载于:https://www.cnblogs.com/Jackpei/p/11204464.html
BZOJ 1867 [Noi1999]钉子和小球 DP相关推荐
- [Noi1999]钉子和小球
Description Input 第1行为整数n(2<=n<=50)和m(0<=m<=n).以下n行依次为木板上从上至下n行钉子的信息,每行中'*'表示钉子还在,'.'表示钉 ...
- noi99钉子和小球 解题报告
题目叙述 钉子和小球 Time Limit: 1000MS Memory Limit: 10000K 题目描述 有一个三角形木板,竖直立放,上面钉着n(n + 1) / 2颗钉子,还有(n + 1)个 ...
- BZOJ 2131 免费的馅饼(DP,二维偏序问题 / 旋转坐标轴转化问题)【BZOJ 修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2131 是 hydro 的 BZOJ ...
- BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...
- BZOJ.1032.[JSOI2007]祖码(区间DP)
题目链接 BZOJ 洛谷 AC代码: 区间DP,f[i][j]表示消掉i~j需要的最少珠子数. 先把相邻的相同颜色的珠子合并起来. 枚举方法一样,处理一下端点可以碰撞消除的情况就行. 当然合并会出现问 ...
- 【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)
题干: osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串. ...
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit ...
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...
- BZOJ 3456: 城市规划 [多项式求逆元 DP]
题意: 求出n个点的简单(无重边无自环)无向连通图数目. 方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000 DP求方案 g(n) n个点所有图的方 ...
最新文章
- Java基础知识强化之IO流笔记32:转换流之OutputStreamWriter的使用
- 具有实际意义的5种云遣返
- 运动,由Silverlight助力 / Sports, Powered by Silverlight
- CSS 文字显示在图片的中间
- CRM Fiori应用 Appointment的close date字段
- 阿尔法大蛋智能机器人功能_智能机器人怎么选?阿尔法蛋大蛋2.0助力孩子新学期...
- 岛屿类问题的广度优先深度优先双解法(Leetcode题解-Python语言)
- java内存溢出分析工具:jmap使用实战
- Page object设计模式
- ASP.NET的HTTP请求处理方法?
- Directx11学习笔记【七】 游戏定时器的实现
- 用grub4dos制作U盘启动盘winpe+红叶dos+maxdos+veket+linuxmint
- JMeter详细使用教程及实际案例
- 手机模拟门禁卡!NFC蓝牙读卡器!
- 三个常用的apk分析网站对比:VirusTotal、哈勃、摸瓜
- 一个OA系统升级实施方案
- 浪漫的七夕表白简单代码(简单的小代码)
- 最大熵阈值python_使用python进行普适计算
- php天眼查数据抓取,python用xpath采集天眼查内容,有反爬,zip拼数据
- java实现调用打印机
热门文章
- 组件间数据交互——父组件向子组件传值( props属性值类型) 子组件向父组件传值-携带参数 || 非父子组件间传值
- Chrome浏览器不支持字体小于12px的解决办法
- Python 小把戏之图片转字符串
- 【light 1341Aladdin and the Flying Carpet】
- Codeforces Round #476 (Div. 2) A. Paper Airplanes
- Simulink仿真 第八节 积分模块
- 广义回归神经网络(GRNN)的数据预测
- SURF角点检测(python)
- [MIPS汇编语言]对于数的输入和输出
- 采集文件到kafka