Codeforces Beta Round #82 (Div. 2) 动态规划
来源:互联网 发布:知无涯者怎么解释 编辑:程序博客网 时间:2024/06/08 15:43
原题在这里C. Buns
题目是关于烤面包的一个规划,已知目前还有n克生面团,m种不同的馅料编号1~m,其中第i种馅料剩余ai克,用bi克的馅料和ci克的的生面团可以拷一个面包卖di元。当然也可以拷不带馅料的面包,每一个面包用c0克的面团卖d0元,直到用光所有的馅料和生面团(最后剩下的材料不足够做一个面包则丢弃),问你当前材料下最多能卖多少钱。
代码如下:
//动态规划,参考了别人的代码#include<iostream>#include<algorithm>using namespace std;int n, m, c0, d0;//第一行的输入int a, b, c, d;int dp[1111];int main() {cin >> n >> m >> c0 >> d0;for (int i = c0; i <= n; i++) dp[i] = dp[i - c0] + d0;//dp[i]表示只有i克生面团不带馅最多能卖多少钱,此递推公式可以自己尝试推一下,显然等于上一个加上d0for (int i = 0; i<m; i++) {cin >> a >> b >> c >> d;//a是剩余的s,每做一个要费b克for (int j = 0; j<(a / b); j++) //a/b表示剩余的馅料最多可以做多少个面包{for (int k = n; k >= c; k--){dp[k] = max(dp[k], dp[k - c] + d);}}}cout << dp[n] << endl;//dp[n]表示用光所有的生面团所能卖的最多钱return 0;}
感觉动态规划算法不是特别难,但难就难在递归方程的推导和最终输出量的表示。只要把这两个搞明白了,感觉剩下的就是一个枚举比较的过程。可能以后多做一些题目就越来越能理解和体会动态规划了。
0 0
- Codeforces Beta Round #82 (Div. 2) 动态规划
- Codeforces Round #363 (Div. 2) C. Vacations(DP 动态规划)
- ****Codeforces Round #363 (Div. 2) C. Vacations(DP 动态规划)
- Codeforces Round #369 (Div. 2) C. Coloring Trees 动态规划
- 动态规划:Codeforces Round #427 (Div. 2) C Star sky
- Codeforces Beta Round #63 (Div. 2)
- Codeforces Beta Round #65 (Div. 2)
- Codeforces Beta Round #67 (Div. 2) ABCD
- Codeforces Beta Round #80 (Div. 2 Only)
- Codeforces Beta Round #83 (Div. 2 Only)
- Codeforces Beta Round #86 (Div. 2 Only)
- Codeforces Beta Round #85 div 2
- Codeforces Beta Round #93 (Div. 2 Only)
- Codeforces Beta Round #95 (Div. 2)
- Codeforces Beta Round #96 (Div. 2)
- Codeforces Beta Round #96 (Div. 2)
- Codeforces Beta Round #96 (Div. 2) (DP)
- Codeforces Beta Round #95 (Div. 2)
- linux通过信号进程间通信实例理解
- 一、REST架构风格:
- IOS-调用系统资源
- 代码重定位
- Markdown之MON
- Codeforces Beta Round #82 (Div. 2) 动态规划
- SSH框架中报错org.springframework.beans.factory.BeanCreationException或者NotWritablePropertyException
- MongoDB学习笔记(一) MongoDB介绍及安装
- 密码安全
- 树莓派“先设置IP后开机”
- python系列之 - 函数
- html中class和id的区别
- 时间复杂度计算
- Android之Animation-list实现逐帧动画