hdoj 5389 Zero Escape
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5389
大体题意是:有两个门A和B,还有一群人,每个人都有一个数字,
疯了一样的T。。比赛的时候十连T也是醉醉的。
这道题感觉像DP,但是不知道从何下手,看别人敲出来才知道怎么去用。
在比赛过程中还有一个问题,想法对了,样例过了,但是T了
原因是因为数组开大了,在dp的过程中用了memset,导致T
在标程里,用了滚动数组,感觉很巧妙,因为dp只需要知道上一状态即可,
利用异或的性质,不断滚动0101010101
---------------------------------------关于digital的性质------------------------------------------------------------
当一群人各位数字之和等于门上数字的时候才可以通过门,可以只通过一个门也可以两个门都通过。
The digital root of a non-negative integer is the single digit value obtained by an iterative process of summing digits,
on each iteration using the result from the previous iteration to compute a digit sum. The process continues until
a single-digit number is reached.
关于digital root(以下用R表示),有以下几条性质:
1、9加(乘)任何数所得的和(积)的数字根,等于原数的数字根(9)
2、若A+B=C,则A,B的数字根(Ra Rb)的和的数字根为C的数字根(Rc)
3、若A*B=C,则A,B的数字根(Ra Rb)的积的数字根为C的数字根(Rc)
4、若A^n=B,则Ra^n的数字跟=Rb。
------------------DP思路---------------------
dp[i+1][a[i]+k] = dp[i+1][a[i]+k] + dp[i][k];
更新加了一个数之后的状态
dp[i+1][k] = dp[i+1][k] + dp[i][k];
加上上一状态的情况数
------------------分情况讨论-------------------
之后比较巧的是对于情况的讨论
1、如果数字跟不等于A+B且不等于A且不等于B,则情况数为0
2、如果是数字根等于A+B的数字根,那么情况数就等于dp[n][A] = dp[n][B]
3、如果数字根等于A或B,那么情况数只有一个
4、如果数字跟等于A且等于B,那么情况数有两个
具体代码如下
)==sum); )ans=(ans+)%MOD; )ans=(ans+)%MOD;
注意到后两种情况其实可以合并,如果A=B的话,后两个if语句同时成立,ans = 2;
#include<stdio.h> #include<cstring> #include<algorithm> #define rep(i,j,k) for(int i=(int)j;i<(int)k;i++) #define per(i,j,k) for(int i=(int)j;i>(int)k;i--) using namespace std; ; ; int T, n; int A, B; int a[MAXN]; int now, sum, ans; ][]; int main(){ scanf("%d",&T); while(T--){ scanf("%d",&n); scanf("%d %d",&A,&B); A %= ;B %= ; sum = ; rep(i,,n){ scanf("%d",&a[i]); a[i] = a[i] % ; sum = (sum+a[i])%; } ) && sum != A && sum != B){ puts("); continue; } memset(dp,,sizeof(dp)); dp[][] = ; now = ; rep(i,,n){ now ^= ; rep(k,,) dp[now][k] = ; rep(k,,){ dp[now][(a[i]+k)%] = ( dp[now][(a[i]+k)%] + dp[now^][k])%MOD; dp[now][k] = ( dp[now][k] + dp[now^][k])%MOD; } } )==sum); )ans=(ans+)%MOD; )ans=(ans+)%MOD; printf("%d\n",ans); } }
hdoj 5389 Zero Escape的更多相关文章
- 递推DP HDOJ 5389 Zero Escape
题目传送门 /* 题意:把N个数分成两组,一组加起来是A,一组加起来是B,1<=A,B<=9,也可以全分到同一组.其中加是按照他给的规则加,就是一位一位加,超过一位数了再拆分成一位一位加. ...
- HDU 5389 Zero Escape(dp啊 多校)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5389 Problem Description Zero Escape, is a visual no ...
- HDU 5389 Zero Escape(DP + 滚动数组)
Zero Escape Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) To ...
- hdu 5389 Zero Escape(记忆化搜索)
Problem Description Zero Escape, is a visual novel adventure video game directed by Kotaro Uchikoshi ...
- hdu 5389 Zero Escape (dp)
题目:http://acm.hdu.edu.cn/showproblem.php? pid=5389 题意:定义数根:①把每一位上的数字加起来得到一个新的数,②反复①直到得到的数仅仅有1位.给定n,A ...
- 2015 Multi-University Training Contest 8 hdu 5389 Zero Escape
Zero Escape Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- HDU 5389 Zero Escape (MUT#8 dp优化)
[题目链接]:pid=5389">click here~~ [题目大意]: 题意: 给出n个人的id,有两个门,每一个门有一个标号,我们记作a和b,如今我们要将n个人分成两组,进入两个 ...
- HDU 5389 Zero Escape
题意:有一些人,每人拿一个号码,有两个门,门的值分别为A和B,要求把人分成两堆(可以为空)一堆人手持号码之和的数字根若等于A或者B就可以进入A门或者B门,要求两堆人分别进入不同的门,求有几种分配方式, ...
- 【HDOJ】1813 Escape from Tetris
bfs预处理一点到边界的最小距离,IDA*求出可行方案.注意按字典序初始化dir数组.并且存在中间点全为1,边界含0的可能性(wa了很多次).此时不输出任何命令. /* 1813 */ #includ ...
随机推荐
- matlab中meshgrid函数的用法
meshgrid用于从数组a和b产生网格.生成的网格矩阵A和B大小是相同的.它也可以是更高维的.这里的大小指的是,size()函数的大小,size()函数返回的是一个向量, 那么size(A) = s ...
- 【C#学习笔记】网页弹出提示框
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- (七)7.2 应用机器学习方法的技巧,准确率,召回率与 F值
建立模型 当使用机器学习的方法来解决问题时,比如垃圾邮件分类等,一般的步骤是这样的: 1)从一个简单的算法入手这样可以很快的实现这个算法,并且可以在交叉验证集上进行测试: 2)画学习曲线以决定是否更多 ...
- Java调优之jvm和线程的内存分析
本文来源于铁木箱子的博客http://www.mzone.cc 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立 ...
- 【转】Github轻松上手4-常用的git命令
转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzih.html 附上一些git的常见命令: • git remote add origin git ...
- Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史.
官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ 百度云盘下载地址: http:/ ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.5.安装Grid,创建ASM磁盘组空间不足
因之前分区时,分区的Last cylinder的值选了“1”,导致创建磁盘组空间不足.解决办法是先删除分区,重新创建分区并删除ASM磁盘,然后重建ASM磁盘 1. 先删除分区,重新创建分区: 1)查询 ...
- HDU 4832 Chess
Chess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- hdu 1023(java实现进度计算)
题意:就是问你火车出战的方案数. 分析:卡特兰数的模板题,递推公式:a[n]=a[n-1]*(4*n-2)/(n+1). java代码实现: import java.util.*; import ja ...
- YII Framework学习教程-YII的安全
web应用的安全问题是很重要的,在“黑客”盛行的年代,你的网站可能明天都遭受着攻击,为了从某种程度上防止被攻击,YII提供了防止攻击的几种解决方案.当然这里讲的安全是片面的,但是值得一看. 官方提供的 ...