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 ;
}

最新文章

  1. 对c++ public、protected、private关键字的理解
  2. laravel打印sql语句
  3. Angular JS 学习之服务(Service)
  4. .Net 自定义应用程序配置
  5. CheckBoxList1复选框
  6. remove duplicates in Postgres(sql去重)
  7. Python一些难以察觉的错误
  8. 在Windows 上安装SQL Server的一些注意事项
  9. java遍历泛型的方法
  10. SSAS-时间维度的标准设计
  11. mysql 时间差问题集锦
  12. mybatis 基础
  13. oracle查询表索引
  14. 【算法】LeetCode算法题-Valid Parentheses
  15. 第26月第23天 nsobject 单例 CFAbsoluteTimeGetCurrent
  16. 详解Zookeeper原理与应用场景
  17. python补充3
  18. Android GridView数据绑定
  19. Android Viewpager加Fragment做界面切换时数据消失的解决方式
  20. sencha touch list更新单行数据

热门文章

  1. Springboot Jackson配置根本方案, 日期格式化, 时区设置生效
  2. JWT(二):使用 Java 实现 JWT
  3. 揭发233的docker/machine
  4. VLC播放器的快捷键(shutcut)
  5. 基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇
  6. Tarjan算法伪代码
  7. 【X86】---X86处理器大小端的数据存储验证
  8. 【PCIE-2】---PCIE配置空间及访问方式简介
  9. NPOI读取Excel的数据
  10. CheckStyle报错的常见问题及解决方式