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减去 ...
随机推荐
- 移动端的vue项目,启动错误:Module build failed: Error: No PostCSS Config found in:
新建一个postcss.config.js 写上下面代码 `module.exports = { plugins: { 'autoprefixer': {browsers: 'last 5 versi ...
- How Javascript works (Javascript工作原理) (九) 网页消息推送通知机制
个人总结: 1.介绍了网页消息推送通知机制 全文地址:https://github.com/Troland/how-javascript-works 这是 JavaScript 工作原理的第九章. 现 ...
- hibernate N+1
http://www.cnblogs.com/sy270321/p/4769198.html
- URAL 2027 2028 两个有趣的题
这两个题,讲的是有一种奇怪的语言,代码是一种二维的矩阵. 前一个题,是根据所给的要求,写一个简单的解释器. 后一个题,是用那种语言写一个简单的小程序. 挺有意思的,所以在这里纪念一下.顺便那个语言的原 ...
- HTTP——学习笔记(6)https
HTTP+加密+认证+完整性保护=HTTPS HTTP是一种新协议吗?: 不是,HTTPS只是HTTP通信接口部分用SSL和TLS协议代替而已 HTTP中,身处应用层的HTTP直接和TCP通信.而在使 ...
- TODOList 多线程交互、RCP、事物控制、数据倾斜、HBase数据同步性
TODOList 多线程交互.RCP.事物控制.数据倾斜.HBase数据同步性 TODO List thread.join()如何互相之间通知? 线程池何时最后运行完成? MemCache性能要优于R ...
- [MST] Build Forms with React to Edit mobx-state-tree Models
We will expand our UI, and give the user the possibility to edit his wishlist. We will use the earli ...
- Solr DataImportHandler 配置
DIH主要用于从数据库抓取数据并创建索引.另外还能够从HTTP(RSS.ATOM)拉数据. 相关概念: Datasource:数据源,包含获取数据必需的信息:数据位置(url).数据库driver.登 ...
- ASMlib操作系统包安装与配置asm disk磁盘
1.加入6块硬盘,每块100g.不管是热加还是冷加.不管是加硬盘,用san存储划lun,或者再加上多路径,都是能够这么做的. 在操作系统层,能识别这种lun.以下的sdb就是一个刚划分的300g的lu ...
- bzoj1029: [JSOI2007]建筑抢修(堆+贪心)
1029: [JSOI2007]建筑抢修 题目:传送门 题解: 一道以前就做过的水题(找个水题签个到嘛...) 很明显就是一道贪心题,这里我们用一个堆来维护 具体看代码吧,很容易YY所以不讲 代码: ...