HDU 5389 Zero Escape(DP + 滚动数组)
Zero Escape
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 864 Accepted Submission(s): 438
Stilwell is enjoying the first chapter of this series, and in this chapter digital root is an important factor.
This is the definition of digital root on Wikipedia:
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.
For example, the digital root of 65536 is 7,
because 6+5+5+3+6=25 and 2+5=7.
In the game, every player has a special identifier. Maybe two players have the same identifier, but they are different players. If a group of players want to get into a door numbered X(1≤X≤9),
the digital root of their identifier sum must be X.
For example, players {1,2,6} can
get into the door 9,
but players {2,3,3} can't.
There is two doors, numbered A and B.
Maybe A=B,
but they are two different door.
And there is n players,
everyone must get into one of these two doors. Some players will get into the door A,
and others will get into the door B.
For example:
players are {1,2,6}, A=9, B=1
There is only one way to distribute the players: all players get into the door 9.
Because there is no player to get into the door 1,
the digital root limit of this door will be ignored.
Given the identifier of every player, please calculate how many kinds of methods are there, mod 258280327.
the number of test cases.
For each test case, the first line contains three integers n, A and B.
Next line contains n integers idi,
describing the identifier of every player.
T≤100, n≤105, ∑n≤106, 1≤A,B,idi≤9
can get into these two doors.
4
3 9 1
1 2 6
3 9 1
2 3 3
5 2 3
1 1 1 1 1
9 9 9
1 2 3 4 5 6 7 8 9
1
0
10
60
题意:给出n个人的id,有两个门,每一个门有一个标号,我们记作a和b,如今我们要将n个人分成两组。进入两个门中,使得两部分人的标号的和(迭代的求,直至变成一位数)各自等于a和b,问有多少种分法,(能够全部的人进入一个门)。
pt = j - p[i];
状态转移方程: dp[i][j] = dp[i-1][j] + dp[i-1][pt];
两种处理方法:
一
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h> using namespace std; const int N = 100001;
const int mod = 258280327;
int dp[N][10];
int n,a,b;
int p[N]; int num(int xx,int yy)
{
int t = xx + yy;
if(t%9 == 0)
{
return 9;
}
return t%9;
} int pnum(int xx,int yy)
{
int tt = xx - yy;
if(tt%9 == 0)
{
return 9;
}
if(tt%9<0)
{
return 9+(tt%9);
}
return tt%9;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int sum = 0;
scanf("%d%d%d",&n,&a,&b);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i]);
sum = num(sum,p[i]);
}
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=9;j++)
{
dp[i][j] += dp[i-1][j];
dp[i][j] = dp[i][j]%mod;
int pt = pnum(j,p[i]);
if(pt == 9)
{
dp[i][j] += max(dp[i-1][0],dp[i-1][9]);
}
else
{
dp[i][j] += dp[i-1][pnum(j,p[i])];
}
dp[i][j] = dp[i][j]%mod;
}
}
int ans = 0;
if(num(a,b) == sum)
{
ans = dp[n][a];
if(a == sum)
{
ans--;
}
}
if(a == sum)
{
ans++;
}
if(b == sum)
{
ans++;
}
printf("%d\n",ans);
}
return 0;
}
二
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h> using namespace std; const int N = 100001;
const int mod = 258280327;
int dp[N][10];
int n,a,b;
int p[N]; int num(int xx,int yy)
{
int t = xx + yy;
if(t%9 == 0)
{
return 9;
}
return t%9;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int sum = 0;
scanf("%d%d%d",&n,&a,&b);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i]);
sum = num(sum,p[i]);
}
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=9;j++)
{
int pt = num(j,p[i]);
dp[i][j]+=dp[i-1][j];
dp[i][pt]+=dp[i-1][j];
dp[i][j]%=mod;
dp[i][pt]%=mod;
}
}
int ans = 0;
if(num(a,b) == sum)
{
ans = dp[n][a];
if(a == sum)
{
ans--;
}
}
if(a == sum)
{
ans++;
}
if(b == sum)
{
ans++;
}
printf("%d\n",ans);
}
return 0;
}
HDU 5389 Zero Escape(DP + 滚动数组)的更多相关文章
- hdu 4576 (简单dp+滚动数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 题意:给出1~n的环,m个操作,每次能顺时针或逆时针走w步,询问最后在l~r这段区间内概率.(1 ...
- hdu5389 Zero Escape DP+滚动数组 多校联合第八场
Zero Escape Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) To ...
- HDU - 2294 Pendant (DP滚动数组降维+矩阵高速功率)
Description On Saint Valentine's Day, Alex imagined to present a special pendant to his girl friend ...
- hdu 5389 Zero Escape (dp)
题目:http://acm.hdu.edu.cn/showproblem.php? pid=5389 题意:定义数根:①把每一位上的数字加起来得到一个新的数,②反复①直到得到的数仅仅有1位.给定n,A ...
- HDU 1024 Max Sum Plus Plus --- dp+滚动数组
HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交. 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值, ...
- HDU 5119 Happy Matt Friends (背包DP + 滚动数组)
题目链接:HDU 5119 Problem Description Matt has N friends. They are playing a game together. Each of Matt ...
- POJ 3666 Making the Grade (DP滚动数组)
题意:农夫约翰想修一条尽量平缓的路,路的每一段海拔是A[i],修理后是B[i],花费|A[i] – B[i]|,求最小花费.(数据有问题,代码只是单调递增的情况) #include <stdio ...
- USACO 2009 Open Grazing2 /// DP+滚动数组oj26223
题目大意: 输入n,s:n头牛 s个栅栏 输入n头牛的初始位置 改变他们的位置,满足 1.第一头与最后一头的距离尽量大 2.相邻两头牛之间的距离尽量满足 d=(s-1)/(n-1),偏差不超过1 3. ...
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...
随机推荐
- 获取鼠标经过处的标签的标签名和id
<script> var el = window.document.body; // 声明一个变量,默认值为body window.document.body.onmouseover = ...
- 学习参考:《Python语言及其应用》中文PDF+英文PDF+代码
学习简单的数据类型,以及基本的数学和文本操作,学习用Python内置的数据结构来处理数据: 掌握Python的代码结构和函数的用法:使用模块和包编写大规模Python程序:深入理解对象.类和其他面向对 ...
- 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码
在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...
- php7 memcache和memcached.so扩展
php7安装memcache和memcached扩展 https://github.com/websupport-sk/pecl-memcache https://github.com/php-mem ...
- CodeVS 1789 最大获利
1789 最大获利 2006年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 新的技术正冲击着 ...
- Informatica环境搭建过程中一些问题-近期项目进了新人,在搭建环境中存在一些问题,之前都处理过一直没有整理,这次接着机会,把这些常见问题处理整理出来
一.Informatica9.5.1创建资源库出错找不到libpmora8.so 错误如下: Database driver event...Error occurred loading librar ...
- mysql索引的使用及优化方法
数据库高级管理及优化 MySQL性能优化 优化MySQL数据库是数据库管理员和数据库开发人员的必备技能.优化MySQL,一方面是找出系统的瓶颈,提高MySQL数据库整体的性能:另一方面是合理设计结构和 ...
- Java8 Lamdba表达式 002
本篇将讲述lamdba表达式的排序,本例包括一个Player对象的集合[稍后定义],通过每一个player的分数高低对列表的player进行排序.类定义001例如以下 public class Sor ...
- 解决The hierarchy of the type is inconsistent错误
可能的原因:自己的类继承于某个类,这个类或者这个类继承的类或者再往上继承的某个类所在的jar包没有被引入. 比如:使用Spring的AOP时,假设须要继承MethodBeforeAdvice和Afte ...
- iOS_第3方类库_側滑选项卡SlideSwitchView
终于效果: 用法: 1.在主控制器中创建一个[SlideSwitchView]的对象实例,并用成员变量记住,如_slideSwitchView,并加入到self.view 2.设置[_slideSwi ...