题目传送门

 /*
题意:把N个数分成两组,一组加起来是A,一组加起来是B,1<=A,B<=9,也可以全分到同一组。其中加是按照他给的规则加,就是一位一位加,超过一位数了再拆分成一位一位加。
DP:dp[i][j]记录前i个数累加和为j的方案数,那么状态转移方程:dp[i][j+a[i]] += dp[i-1][j]; 当然,dp[i][a[i]] = 1;
然后考虑几种特殊情况:都前往S1门或S2门,方案数+1。另外,比赛时我写出正确的转移方程,结果答案输出dp[n][s1]+dp[n][s2]将近是2倍,没多想,弃之,当时思绪很乱,以为方法错误。。。。
*/
/************************************************
* Author :Running_Time
* Created Time :2015-8-13 14:39:58
* File Name :J.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e5 + ;
const int INF = 0x3f3f3f3f;
const int MOD = ;
int dp[MAXN][];
int a[MAXN];
int n, s1, s2; int cal(int x, int y) {
int ret = x + y;
ret %= ;
if (ret == ) return ;
else return ret;
} int main(void) { //HDOJ 5389 Zero Escape
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d%d%d", &n, &s1, &s2);
int sum = ;
for (int i=; i<=n; ++i) { //把N个数全加起来再按照规则处理和两个两个加是一样的
scanf ("%d", &a[i]); sum = cal (sum, a[i]);
} memset (dp, , sizeof (dp));
for (int i=; i<=n; ++i) {
dp[i][a[i]] = ;
for (int j=; j>=; --j) {
dp[i][j] = (dp[i][j] + dp[i-][j]) % MOD;
if (j + a[i] > ) {
int x = cal (j, a[i]);
dp[i][x] = (dp[i][x] + dp[i-][j]) % MOD;
}
else {
dp[i][j+a[i]] = (dp[i][j+a[i]] + dp[i-][j]) % MOD;
}
}
} int ans = ;
if (cal (s1, s2) == sum) { //两个门都能进去且条件符合
ans += dp[n][s1];
if (s1 == sum) ans--;
}
if (s1 == sum) ans++; //可以全进一个门
if (s2 == sum) ans++; printf ("%d\n", ans);
} return ;
}

递推DP HDOJ 5389 Zero Escape的更多相关文章

  1. 递推DP HDOJ 5328 Problem Killer

    题目传送门 /* 递推DP: 如果a, b, c是等差数列,且b, c, d是等差数列,那么a, b, c, d是等差数列,等比数列同理 判断ai-2, ai-1, ai是否是等差(比)数列,能在O( ...

  2. 递推DP HDOJ 5459 Jesus Is Here

    题目传送门 题意:简单来说就是sn = sn-1 + sn-2递推而来,求其中所有c字符的:∑i<j:sn[i..i+2]=sn[j..j+2]=‘‘cff"(j−i) mod 530 ...

  3. 递推DP HDOJ 5092 Seam Carving

    题目传送门 /* 题意:从上到下,找最短路径,并输出路径 DP:类似数塔问题,上一行的三个方向更新dp,路径输出是关键 */ #include <cstdio> #include < ...

  4. 递推DP HDOJ 5375 Gray code

    题目传送门 /* 题意:给一个串,只能是0,1,?(0/1).计算格雷码方法:当前值与前一个值异或,若为1,可以累加a[i],问最大累加值 DP:dp[i][0/1]表示当前第i位选择0/1时的最大分 ...

  5. 递推DP URAL 1167 Bicolored Horses

    题目传送门 题意:k个马棚,n条马,黑马1, 白马0,每个马棚unhappy指数:黑马数*白马数,问最小的unhappy值是多少分析:dp[i][j] 表示第i个马棚放j只马的最小unhappy值,状 ...

  6. 递推DP URAL 1017 Staircases

    题目传送门 /* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转 ...

  7. 递推DP URAL 1260 Nudnik Photographer

    题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...

  8. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  9. 递推DP URAL 1119 Metro

    题目传送门 /* 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 递推DP:仿照JayYe,处理的很巧妙,学习:) 好 ...

随机推荐

  1. msp430入门编程0

    msp430单片机最小系统 msp430入门学习 msp430入门编程

  2. P1340 兽径管理 洛谷

    https://www.luogu.org/problem/show?pid=1340 题目描述 约翰农场的牛群希望能够在 N 个(1<=N<=200) 草地之间任意移动.草地的编号由 1 ...

  3. cogs——21. [HAOI2005] 希望小学

    21. [HAOI2005] 希望小学 ★★   输入文件:hopeschool.in   输出文件:hopeschool.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述 ...

  4. codeforces 762E(cdq分治)

    题意: n个电台,每个电台有三个属性xi, ri, fi.分别代表电台的坐标,电台的播报范围,以及播报的频率. 对于一对电台i, j,若min(ri, rj) >= |xi - xj|,那么他们 ...

  5. mysql配置文件my.ini的修改问题

    修改innodb_buffer_pool_size这个参数一般都没问题,但是修改innodb_log_file_size这个参数如果过大,mysql日志就会提示: Error: log file .\ ...

  6. 携程Apollo(阿波罗)配置中心的Java样例客户端启动和调试

    参考:https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97#23-java%E6%A0 ...

  7. MongoDB小结03 - insert、remove

    连接MongoDB(bin目录下) ./mongo 如果觉得shell里空空的可以输入help,在刷屏的同时大致了解下有哪些方法 help 现在咱们还没有数据库,咱们创建一个,任性起名:templat ...

  8. NA远程

    远程网络按照L1分类:     租用专线(Leased Line):一般采用同步串行链路,使用HDLC/PPP封装:     线路交换(Circuit-Switched):一般采用异步串行链路,使用H ...

  9. psping

    psping工具功能主要包括:ICMP Ping.TCP Ping.延迟测试.带宽测试,是微软出品. 下载地址:https://download.sysinternals.com/files/PSTo ...

  10. [DLX+bfs] hdu 4069 Squiggly Sudoku

    题意: 给你9*9的矩阵.对于每一个数字.能减16代表上面有墙,能减32代表以下有墙. .. 最后剩下的数字是0代表这个位置数要求,不是0代表这个数已知了. 然后通过墙会被数字分成9块. 然后做数独, ...