这个题在暑假集训的时候做组队训练赛的时候做过,当时状态方程是我推出来的,但是WA了10+次吧。但是这次写,还是WA了很多次。

所以总结一下,DP的话,能用递推写还是尽量用递推写吧,记忆化写的话可能会出现问题,这个应该是我水平问题吧。

方程是这样的:dp(i,j,1) = (dp(i - 1,j - 2,1) + dp(i - 1,j - 1,1) * 2 + dp(i - 1,j,1) + dp(i - 1,j - 2,0) + dp(i - 1,j - 1,0) * 2) % MOD;

dp(i,j,0) = (dp(i - 1,j,0) + dp(i - 1,j - 1,0) + dp(i - 1,j - 1,1)+ dp(i - 1,j,1) * 2) % MOD;

dp(i,j,0)表示当切到第i层切到j块时第i层中间的巧克力是不连着的切法的总数。

dp(i,j,1)表示当切到第i层切到j块时第i层中间的巧克力是连着的切法的总数。

下面贴代码吧:

View Code

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 #define MOD 100000007
 6 int d[1020][2040][2];
 7
 8 int dp(int i,int j,int k)
 9 {
10     if(j <= 0)  return 0;
11
12     int &ans = d[i][j][k];
13
14     if(ans != -1)   return ans;
15
16     if(i * 2 < j)
17     {
18         ans = 0;
19         return ans;
20     }
21
22     if(k == 1)
23     {
24         ans = (dp(i - 1,j - 2,1) + dp(i - 1,j - 1,1) * 2 + dp(i - 1,j,1)
25                 + dp(i - 1,j - 2,0) + dp(i - 1,j - 1,0) * 2) % MOD;
26         return ans;
27     }
28
29     else if(k == 0)
30     {
31         ans = (dp(i - 1,j,0) + dp(i - 1,j - 1,0) + dp(i - 1,j - 1,1)
32          + dp(i - 1,j,1) * 2) % MOD;
33         return ans;
34     }
35 }
36
37 int main()
38 {
39     int ncase,n,k;
40     scanf("%d",&ncase);
41     memset(d,-1,sizeof(d));
42     d[1][1][0] = 1;
43     d[1][1][1] = 0;
44     d[1][2][0] = 0;
45     d[1][2][1] = 1;
46     while(ncase--)
47     {
48         scanf("%d%d",&n,&k);
49         printf("%d\n",(dp(n,k,0) + dp(n,k,1)) % MOD);
50     }
51     return 0;
52 }

转载于:https://www.cnblogs.com/zhexipinnong/archive/2012/11/13/2769000.html

HDU 4301 Divide Chocolate相关推荐

  1. hdu 5783——Divide the Sequence

    题意及思路: 求一个序列的分段个数,使得每一段的前缀和为0,如果正向思维,那么解法是从前往后遍历,每遇到一个负数就向前遍历直到>=0(这样贪心保证了序列尽可能多),但是这样最坏的情况是n^2的, ...

  2. 在python中requests模块怎么安装_Python requests模块在Windows下安装

    发现一个爬虫库太方便了,而且支持python3! 安装方法在http://docs.python-requests.org/en/latest/user/install/#install很详细 只不过 ...

  3. java 分享巧克力_[leetcode 双周赛 11] 1231 分享巧克力

    1231 Divide Chocolate 分享巧克力 问题描述 你有一大块巧克力,它由一些甜度不完全相同的小块组成.我们用数组 sweetness 来表示每一小块的甜度. 你打算和 K 名朋友一起分 ...

  4. leetcode刷题规划

    LeetCode精华题目列表[刷题规划系列] – TuringPlanet 目录 算法题到底在考察什么? 题目列表 Array String Linked List Queue Stack Advan ...

  5. html中标签的src属性值,HTML frame 标签的 src 属性

    Logstash实践: 分布式系统的日志监控 文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用 ...

  6. 夜深人静写算法(十二)- 模拟退火

    一.引例         1.函数最值        函数最值分为函数最大值和函数最小值,最小值即定义域内函数的最小值, 最大值即定义域内函数的最大值.函数最大(小)值的几何意义为函数图像的最高(低) ...

  7. HDU 2282 Chocolate (最小费用最大流)

    HDU  2282 Chocolate (最小费用最大流) #include <iostream> #include <cstdio> #include <queue&g ...

  8. 多校第六场 HDU 4927 JAVA大数类+模拟

    HDU 4927 题目大意:给定一个长度为n的序列a,每次生成一个新的序列,长度为n-1,新序列b中bi=ai+1−ai,直到序列长度为1.输出最后的数. 思路:这题实在是太晕了,比赛的时候搞了四个小 ...

  9. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

最新文章

  1. 西南石油大学计算机二级成绩查询,西南石油大学本科学生成绩自助查询打印终端管理办法...
  2. Mathematica 对曲线进行拟合
  3. windows中search driver的顺序
  4. protect a health
  5. 机器学习(一):BP神经网络(含代码及注释)
  6. window启动过程讲解--PPT截图[张银奎]
  7. 外点罚函数matlab程序_关于图像轮廓识别的程序实现
  8. vb.net机房收费系统之组合查询
  9. 需要两张图片合成一个PDF文件(两页)
  10. 华为路由器IPv6 over IPv4 GRE隧道配置详解
  11. 【概率密度函数】简介概率论中的概率密度函数
  12. 全球及中国冻干菠萝行业市场运行模式及未来发展前景分析报告2022-2028年
  13. 一个球绳命最后的高度哈哈
  14. python自动化(六)持续集成:2.Jenkins技术讲解
  15. 少儿编程启蒙课程9:善用变量 拥抱变化
  16. 三、vue3--生命周期、Hook函数、 toRef和toRefs、其他的组合式API
  17. 蛮力算法解决问题(c语言)
  18. ALLEGRO 中导入PADS的asc文件时显示pads_in.log does not exit
  19. 微信小程序-电影app程序遇到得问题
  20. android-studio推荐模拟器,Android studio 三大模拟器比较,强烈推荐第三种

热门文章

  1. 作业3_interview_傅志阳_1101210634
  2. Real Application Testing Database Replay、SPA的价格和介绍
  3. 从自卑的阴影中走出来
  4. [Java] 蓝桥杯BASIC-23 基础练习 芯片测试
  5. 【note】Swift之闭包表达式的几种简化缩写形式
  6. oracle数据设置为ull,Oracle _11g_使用手册_自备
  7. 如何:删除Word 2010中的“向下箭头”
  8. 修改ranger ui的admin用户登录密码踩坑小记
  9. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)...
  10. 图像处理工具包ImagXpress使用教程:多页TIFF编辑API的使用(二)