博客
关于我
巧克力蛋糕 DP
阅读量:161 次
发布时间:2019-02-28

本文共 779 字,大约阅读时间需要 2 分钟。

在这里插入图片描述

在这里插入图片描述

题目大意,现在有一个L高度的容器,还有三种巧克力:1.高1cm的黑巧克。2.高1cm的白巧克。1.高kcm的黑巧克。然后要使得最上层和最底层都是黑巧克力,并且黑白巧克力必须间隔着放置。可以不放满,但是总高度不能超过L,问:有多少种摆放方式。

刚开始我是用dfs跑的,然后tle了。然后看了一下题解发现是dp(题解说是简单dp,但是我看了很久才懂)。

我们使用一个二维数组dp[max][5],其中dp[i][1/2/3]表示第i层的1cm的黑巧克力/白巧克力/kcm的黑巧克力的可摆放方案数。模拟着题目要求进行dp即可。因为顶上和底下都必须是黑巧克力,最后只需将所有高度的黑巧克力的方案数全加起来即可。

ll dp[1005][5];int main(){       ll l, k;    cin >> l >> k;    ll ans = 0;    dp[1][1] = 1;    dp[1][3] = (l >= k) ? 1 : 0;    for (int i = 2; i <= l; i++)    {           if (i - k >= 1)            dp[i][2] = dp[i - 1][1] + dp[i - k][3];        else            dp[i][2] = dp[i - 1][1];        dp[i][1] = dp[i - 1][2];        if (i + k - 1 <= l)            dp[i][3] = dp[i - 1][2];    }    for (int i = 1; i <= l; i++)        ans += dp[i][1] + dp[i][3];    cout << ans << endl;}

转载地址:http://phod.baihongyu.com/

你可能感兴趣的文章
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>
MySQL中B+Tree索引原理
查看>>
mysql中cast() 和convert()的用法讲解
查看>>
mysql中datetime与timestamp类型有什么区别
查看>>
MySQL中DQL语言的执行顺序
查看>>
mysql中floor函数的作用是什么?
查看>>
MySQL中group by 与 order by 一起使用排序问题
查看>>
mysql中having的用法
查看>>
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>