HDU_5456_数位dp
http://acm.hdu.edu.cn/showproblem.php?pid=5456
转化成a=b+c,dp[i][a][b][c]表示剩余i木棒,a是否有进位,b是否首尾,c是否首位,注意每次都要memset。
#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
using namespace std; int n,m,stick[] = {,,,,,,,,,};
LL dp[][][][]; LL dfs(int sum,int a,int b,int c)
{ if(sum < ) return ;
if(dp[sum][a][b][c] != -) return dp[sum][a][b][c];
if(b && c)
{
if(!a && sum == ) return ;
if(a && sum == stick[]) return ;
}
if(sum == ) return ;
LL& temp = dp[sum][a][b][c];
temp = ;
if(b == && c == )
{
for(int i = ;i <= ;i++)
{
for(int j = ;j <= ;j++)
{
int sub = stick[i]+stick[j]+stick[(i+j+a)%];
temp += dfs(sum-sub,(i+j+a)/,,);
if(i != ) temp += dfs(sum-sub,(i+j+a)/,,);
if(j != ) temp += dfs(sum-sub,(i+j+a)/,,);
if(i != && j != ) temp += dfs(sum-sub,(i+j+a)/,,);
temp %= m;
}
}
}
else if(b == )
{
for(int i = ;i <= ;i++)
{
int sub = stick[i]+stick[(i+a)%];
temp += dfs(sum-sub,(i+a)/,,);
if(i != ) temp += dfs(sum-sub,(i+a)/,,);
temp %= m;
}
}
else if(c == )
{
for(int i = ;i <= ;i++)
{
int sub = stick[i]+stick[(i+a)%];
temp += dfs(sum-sub,(i+a)/,,);
if(i != ) temp += dfs(sum-sub,(i+a)/,,);
temp %= m;
}
}
temp %= m;
return temp;
}
int main()
{
int T;
scanf("%d",&T);
for(int i = ;i <= T;i++)
{
memset(dp,-,sizeof(dp));
scanf("%d%d",&n,&m);
printf("Case #%d: %lld\n",i,dfs(n-,,,));
}
return ;
}
HDU_5456_数位dp的更多相关文章
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
- 数位DP之奥义
恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...
- 浅谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...
随机推荐
- 这份前端面试小册子dog cheng带来啦~
写在前面 没有错,就是我啦dog cheng,好久不见,从17年在博客园写下第一篇文章,转身间已然两年,从大二到现在的大四预备毕业生,我仍然在这条道路上前进.秋招早已经结束,在拿到用友,滴滴的offe ...
- linux下压缩包的解压
linux下 最常见的是 .tar.gz 包和.tar.bz2包 .tar.gz格式的压缩包解压命令是: tar -zxvf xx.tar.gz .tar.bz2格式的压缩包 ...
- CF1200E Compress Words | 字符串hash
传送门 Examples input 1 5 I want to order pizza output 1 Iwantorderpizza input 2 5 sample please ease i ...
- Java面向对象之异常详解
目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往 ...
- Linux 学习笔记 6 搭建nginx 实现二级域名访问
前言 在前一节的内容里面,我们学习了如何使用yum 包管理工具来安装我们需要的软件,这节内容,通过搭建Nginx 反向代理服务器,以及学习服务的配置等内容. NGINX Nginx是一款轻量级的Web ...
- MySQL数据库用户、角色、授权
权限包括 insert delete update select all privileges 登录MySQL > mysql -uroot -p Enter password ...
- 【转】8 个效果惊人的 WebGL/JavaScript 演示
英文原文:9 IMPRESSIVE WEBGL JAVASCRIPT EFFECT SHOWCASE,翻译:iteye WebGL 是一种 3D 绘图标准,这种绘图技术标准允许把 JavaScript ...
- pc和H5响应式方案
pc响应式:(所有应用在pc端) 解决方案1.媒体查询 2.flex,百分比 3.栅格布局 媒体查询 @media screen and (max-width:768px) @media scree ...
- kubernetes concepts -- Replication Controller
Edit This Page ReplicationController NOTE: A Deployment that configures a ReplicaSet is now the reco ...
- Mysql.复选条件的查询
场景:有筛选条件 联盟:1.复联 2.正义联盟 3.猛禽小队,条件可多选,求查询结果. name league 飞人 复联,正义联盟 黑人 复联,正义联盟,猛禽小队 打手枪的男人 复联,猛禽小队 深井 ...