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 ...
随机推荐
- jquerymobile使用技巧
1)ajax开关(默认jquery以ajax方式加载页面) $.mobile.ajaxEnabled = false; 2)不编译指定标签 $.mobile.page.prototype.option ...
- IOS中UIWebView执行javaScript脚本时注意点
1.webView之所以能够滚动,因为它内部有一个UIScrollView子控件 2.移除webView顶部和底部灰色的一层view * 遍历webView中scrollView内部的所有子控件 * ...
- hihoCoder hiho一下 第四十八周 题目1 : 拓扑排序·二
题意: 给定一个拓扑图,其中部分结点含有1个病毒,每个结点只要收到病毒就会立即往出边所能到达的点传播,病毒数可叠加,求所有结点的病毒数总和. 思路: 根据拓扑的特点,每个入度为0的点肯定不会再被传播病 ...
- QCon 2015 阅读笔记 - 其他精选主题
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...
- errno 与 perror()/strerror()函数
errno是个全局的int型变量,当调用一个系统函数时不管成功不成功都有可能改变errno的值.但只有不成功时errno的值才是有意义的.如果要真的想用errno进行多次打印,刚可以先将其缓存一下.下 ...
- Heritrix源码分析(十三) Heritrix的控制中心(大脑)CrawlController(二)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/650744 本博客已迁移到本人独立博客: http://www.yun5u. ...
- jquery easyui datagrid字段绑定问题
表字段为G_XIAN,生成PO对象时为private String GXian; datagrid字段必须写为gXian,否则数据无法正确绑定. 总结:不管VO对象中字段名称首字母是否大写,在data ...
- hdu 5469 Antonidas (dfs+剪枝)2015 ACM/ICPC Asia Regional Shanghai Online
题意: 给出一棵树,再给出每个节点上的值(一个char字符)这些值以一个字符串s1表示,然后给出一个s2字符串,问在这棵树上是否存在两个点,从一个点走到另一个点所经过的路径上的char字符组成的字符串 ...
- [再寄小读者之数学篇](2014-11-19 $\tan x/x$ 在 $(0,\pi/2)$ 上递增)
$$\bex \frac{\tan x}{x}\nearrow. \eex$$ Ref. [Proof Without Words: Monotonicity of $\tan x/x$ on $(0 ...
- 10、NFC技术:读写NFC标签中的文本数据
代码实现过程如下: 读写NFC标签的纯文本数据.java import java.nio.charset.Charset; import java.util.Locale; import androi ...