hdu 5389 Zero Escape (dp)
题目:http://acm.hdu.edu.cn/showproblem.php?
pid=5389
题意:定义数根:①把每一位上的数字加起来得到一个新的数,②反复①直到得到的数仅仅有1位。给定n,A,B和n个一位数,求把这n个数分成两部分,使得这两部分的当中一部分的和的数根等于A另外一部分的和的数根等于B的方案数。
分析:一个数a的数根s=(a-1)%9+1,为了方便直接用s=a%9,当中0代表9。定义dp[i][j]表示前i个数中数根为j的方案数。
对于第i个数能够选也能够不选,那么状态转移方程为dp[i][j]=dp[i-1][j](不选),dp[i][(j+c[i])%9]+=dp[i-1][j](选)。特殊情况就是{i:1~n,sigma(c[i])}%9!=(A+B)%9,这样的情况不能将这n个数划分成非空的满足条件的两部分,须要特判一下。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e5+7;
const int mod = 258280327;
int dp[maxn][10],c[maxn];
int main()
{
int ncase,n,A,B,i,j;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%d%d%d",&n,&A,&B);
int sum=0;
for(i=1;i<=n;i++)
{
scanf("%d",&c[i]);
sum+=c[i];
}
if(sum%9!=(A+B)%9)
{
if(A%9==sum%9 && B%9==sum%9)
printf("2\n");
else if(A%9==sum%9 || B%9==sum%9)
printf("1\n");
else
printf("0\n");
continue ;
}
dp[0][0]=1;
for(i=1;i<=n;i++)
{
for(j=0;j<=8;j++)
dp[i][j]=dp[i-1][j];
for(j=0;j<=8;j++)
dp[i][(j+c[i])%9]=(dp[i][(j+c[i])%9]+dp[i-1][j])%mod;
}
printf("%d\n",dp[n][A%9]);
}
return 0;
}
hdu 5389 Zero Escape (dp)的更多相关文章
- 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(dp啊 多校)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5389 Problem Description Zero Escape, is a visual no ...
- HDU 5389 Zero Escape (MUT#8 dp优化)
[题目链接]:pid=5389">click here~~ [题目大意]: 题意: 给出n个人的id,有两个门,每一个门有一个标号,我们记作a和b,如今我们要将n个人分成两组,进入两个 ...
- hdu 5389 Zero Escape(记忆化搜索)
Problem Description Zero Escape, is a visual novel adventure video game directed by Kotaro Uchikoshi ...
- 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
题意:有一些人,每人拿一个号码,有两个门,门的值分别为A和B,要求把人分成两堆(可以为空)一堆人手持号码之和的数字根若等于A或者B就可以进入A门或者B门,要求两堆人分别进入不同的门,求有几种分配方式, ...
- 递推DP HDOJ 5389 Zero Escape
题目传送门 /* 题意:把N个数分成两组,一组加起来是A,一组加起来是B,1<=A,B<=9,也可以全分到同一组.其中加是按照他给的规则加,就是一位一位加,超过一位数了再拆分成一位一位加. ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- ios开发讲解之anchorPoint和position详解
引言 相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与posi ...
- Python 爬取图书图片和地址
#-*- coding:utf-8 -*- import xlwt import urllib import re def getHtml(url): page = urllib.urlopen(ur ...
- 为什么要使用数据库连接池?以及用法(DBUtils)
看代码, from flask import Flask from db import POOL import pymysql app = Flask(__name__) app.secret_key ...
- css图像处理与动画
先讨论几个css 问题 1,css 清除浮动的方法 2,css 居中 3,多行省略号 4,小布局技巧 2D 动画功能属性兼容性:transform.transition.animation trans ...
- HTTP重定向
404 Not Found301 Moved Permanently302 Found500 Internal Server ErrorHTTP重定向就是通过301和302两种状态码来实现的. 302 ...
- lambda遍历的精简
本文转自 http://it.deepinmind.com/java%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/2014/03/15/Java%E5%8 ...
- 关于iOS 7的几个开源项目
MBSwitch MBSwitch是一个体现了iOS 7扁平化设计风格的UISwitch,支持iOS 7以下系统.允许使用者进行颜色的深度自定义,你可以定义边框的颜色,开/关的颜色以及按钮的颜色. ...
- 【bzoj4269】再见Xor 高斯消元求线性基
题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...
- [转] Makefile 基础 (5) —— Makefile 使用变量
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- jacoco功能测试覆盖率统计
1.在java程序的启动脚本(或者tomcat)中加入javaagent参数-javaagent:/home/apps/jacocoagent.jar=destfile=/home/apps/jaco ...