想状态和钉子的位置如何匹配想了半天。。。后来发现不是一样的吗$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相关推荐

  1. [Noi1999]钉子和小球

    Description Input 第1行为整数n(2<=n<=50)和m(0<=m<=n).以下n行依次为木板上从上至下n行钉子的信息,每行中'*'表示钉子还在,'.'表示钉 ...

  2. noi99钉子和小球 解题报告

    题目叙述 钉子和小球 Time Limit: 1000MS Memory Limit: 10000K 题目描述 有一个三角形木板,竖直立放,上面钉着n(n + 1) / 2颗钉子,还有(n + 1)个 ...

  3. BZOJ 2131 免费的馅饼(DP,二维偏序问题 / 旋转坐标轴转化问题)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2131 是 hydro 的 BZOJ ...

  4. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)

    BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...

  5. BZOJ.1032.[JSOI2007]祖码(区间DP)

    题目链接 BZOJ 洛谷 AC代码: 区间DP,f[i][j]表示消掉i~j需要的最少珠子数. 先把相邻的相同颜色的珠子合并起来. 枚举方法一样,处理一下端点可以碰撞消除的情况就行. 当然合并会出现问 ...

  6. 【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)

    题干: osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串. ...

  7. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

  8. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )

    既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...

  9. BZOJ 3456: 城市规划 [多项式求逆元 DP]

    题意: 求出n个点的简单(无重边无自环)无向连通图数目. 方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000 DP求方案 g(n) n个点所有图的方 ...

最新文章

  1. Java基础知识强化之IO流笔记32:转换流之OutputStreamWriter的使用
  2. 具有实际意义的5种云遣返
  3. 运动,由Silverlight助力 / Sports, Powered by Silverlight
  4. CSS 文字显示在图片的中间
  5. CRM Fiori应用 Appointment的close date字段
  6. 阿尔法大蛋智能机器人功能_智能机器人怎么选?阿尔法蛋大蛋2.0助力孩子新学期...
  7. 岛屿类问题的广度优先深度优先双解法(Leetcode题解-Python语言)
  8. java内存溢出分析工具:jmap使用实战
  9. Page object设计模式
  10. ASP.NET的HTTP请求处理方法?
  11. Directx11学习笔记【七】 游戏定时器的实现
  12. 用grub4dos制作U盘启动盘winpe+红叶dos+maxdos+veket+linuxmint
  13. JMeter详细使用教程及实际案例
  14. 手机模拟门禁卡!NFC蓝牙读卡器!
  15. 三个常用的apk分析网站对比:VirusTotal、哈勃、摸瓜
  16. 一个OA系统升级实施方案
  17. 浪漫的七夕表白简单代码(简单的小代码)
  18. 最大熵阈值python_使用python进行普适计算
  19. php天眼查数据抓取,python用xpath采集天眼查内容,有反爬,zip拼数据
  20. java实现调用打印机

热门文章

  1. 组件间数据交互——父组件向子组件传值( props属性值类型) 子组件向父组件传值-携带参数 || 非父子组件间传值
  2. Chrome浏览器不支持字体小于12px的解决办法
  3. Python 小把戏之图片转字符串
  4. 【light 1341Aladdin and the Flying Carpet】
  5. Codeforces Round #476 (Div. 2) A. Paper Airplanes
  6. Simulink仿真 第八节 积分模块
  7. 广义回归神经网络(GRNN)的数据预测
  8. SURF角点检测(python)
  9. [MIPS汇编语言]对于数的输入和输出
  10. 采集文件到kafka