hdu5389
题意:给你n个人每一个人手里有一个id,然后给你两个数a和b。让你把n个人分为两组。条件是 一组人手里的id和等于a 另一组人的id和等于b,这里的和是指加起来之后对9取余,假设sum等于0 则sum等于9 否则sum = sum。另一种情况也能够
就是全部人的id和等于a 或者等于b 相当于分为一组。
思路:首先 假设能找到满足题意的解。一定满足a和b的和等于n个人的标号的和
然后 数位dp,dp[i][j]表示在第i个数字的时候 前面i个数字能组成j而且包含arr[i]的方案数。
状态转移方程:dp[i][j] = dp[i-1][j] + dp[i-1][cnt],cnt = j - arr[i](这个应该能理解吧),cnt<=0时要加上9;
另外 假设a和b的和不等于n个人的标号的和还要考虑是否满足 a == sum或b == sum;
代码:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <cstdio>
#include <string>
#include <bitset>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <map>
#include <set>
#define sss(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define mem1(a) memset(a,-1,sizeof(a))
#define mem(a) memset(a,0,sizeof(a))
#define ss(a,b) scanf("%d%d",&a,&b)
#define s(a) scanf("%d",&a)
#define p(a) printf("%d\n", a)
#define INF 0x3f3f3f3f
#define w(a) while(a)
#define PI acos(-1.0)
#define LL long long
#define eps 10E-9
#define N 1000000+20
#define mod 258280327
const int SIGMA_SIZE=26;
const int MAXN=100010;
const int MAXNODE=600010;
using namespace std;
void mys(int& res)
{
int flag=0;
char ch;
while(!(((ch=getchar())>='0'&&ch<='9')||ch=='-'))
if(ch==EOF) res=INF;
if(ch=='-') flag=1;
else if(ch>='0'&&ch<='9') res=ch-'0';
while((ch=getchar())>='0'&&ch<='9') res=res*10+ch-'0';
res=flag? -res:res;
}
void myp(int a)
{
if(a>9)
myp(a/10);
putchar(a%10+'0');
}
/*************************THE END OF TEMPLATE************************/
int arr[100009];
int dp[100009][10];
int sum_mod(int x, int y){
int ans = x + y;
ans %= 9;
if(!ans) return 9;
return ans;
}
int main(){
int t, n, a, b;
s(t);
w(t--){
mem(dp);
sss(n, a, b);
int sum = 0;
for(int i=1; i<=n; i++){
s(arr[i]);
sum = sum_mod(sum, arr[i]);
}
if(sum != sum_mod(a, b)){
int ans = 0;
if(a == sum) ans ++;
if(b == sum) ans ++;
p(ans % mod);
}
else{
dp[1][arr[1]] = 1;
for(int i=2; i<=n; i++){
for(int j=1; j<=9; j++){
int cnt = j - arr[i] <= 0? j - arr[i] + 9: j-arr[i];
dp[i][j] = (dp[i-1][j] + dp[i-1][cnt]) % mod;
}
}
p((dp[n][a]+dp[n][b])%mod);
}
}
return 0;
}
hdu5389的更多相关文章
- 2015 多校联赛 ——HDU5389(dp)
Sample Input 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 Sample Output 1 0 1 ...
- hdu5389 Zero Escape DP+滚动数组 多校联合第八场
Zero Escape Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) To ...
- hdu5389(DP)
题意: 给出n个人的id,有两个门,每一个门有一个标号.我们记作a和b,如今我们要将n个人分成两组,进入两个门中,使得两部分人的标号的和(迭代的求,直至变成一位数.我们姑且叫做求"和&quo ...
- hdu5389 Zero Escape
Problem Description Zero Escape, is a visual novel adventure video game directed by Kotaro Uchikoshi ...
- [hdu5389 Zero Escape]数根的性质,DP
题意:把n个数(1-9)放到A集合和B集合里面去,使得A集合里面的数的数根为a,B集合里面的数的数根为b,也可以只放在A或B任一个集合里面.求方法总数.比如A={2,4,5},则A的数根为[2+4+5 ...
随机推荐
- iOS 热门高效开源库集锦,收藏备用
一.推荐使用的第三方库 1:基于响应式编程思想的ReactiveCocoa 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:iOS解耦与组件化开 ...
- selenium使用报错“selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.”
安装了python3,使用pip安装了selenium,但是在使用时,报了“selenium.common.exceptions.WebDriverException: Message: 'gecko ...
- Unity 实现Log实时输出到屏幕或控制台上<一>
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/49818953 作者:car ...
- 【Codeforces Round #424 (Div. 2) B】Keyboard Layouts
[Link]:http://codeforces.com/contest/831/problem/B [Description] 两个键盘的字母的位置不一样; 数字键的位置一样; 告诉你第一个键盘按某 ...
- [Python] Problem with Default Arguments
Default arguments are a helpful feature, but there is one situation where they can be surprisingly u ...
- 指尖上的电商---(10)SolrAdmin中加入多核
在Solr中有的时候,我们并不仅仅是须要一种形式的索引文件.可能须要多种不同数据的索引文件.这时我们就能够在同一个Solr以下创建 多核. 比方,我们在solr以下想把产品信息和分类信息各存放一个索引 ...
- log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)
近期对系统中的旧项目实现log升级,选择了log4j2来取代log4j.作为最新一代的log实现.log4j2好在那里能够直接看log4j2性能章节. 这里写写怎样从log4j升级到log4j2. 1 ...
- HDU1788 Chinese remainder theorem again【中国剩余定理】
题目链接: pid=1788">http://acm.hdu.edu.cn/showproblem.php?pid=1788 题目大意: 题眼下边的描写叙述是多余的... 一个正整N除 ...
- SpringBoot与Dubbo的整合-zookeeper和监控中心搭建
对于Dubbo的应用已经是十分普遍,自从阿里巴巴开源以来,国内许多公司就采用了dubbo的架构来开发项目.不过再dubbo十分火的时候,突然就停止更新了, 只有当当网还在其基础进行了拓展(dubbox ...
- GridDataView实现 点击任意一格可以修改
直接上代码好了 private void dgv1Member_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { string ...