
Luogu P1164 小A点菜 & P1044 栈【基础动态规划】
发布日期:2021-05-07 13:10:04
浏览次数:28
分类:原创文章
本文共 1251 字,大约阅读时间需要 4 分钟。
这两道题都是我用来查漏补缺练习动态规划的,所以放到一起写。
文章目录
· P1164 小A点菜
思路
可以设 f [ i ] f[i] f[i] 表示当前剩余 i i i 元钱的方案数.
则 ∑ j = a + 1 m f [ j ] = f [ j − a ] \sum_{j=a+1}^{m} f[j]=f[j-a] ∑j=a+1mf[j]=f[j−a] ,当然做完之后要 f [ a ] + + f[a]++ f[a]++;
代码
#include<iostream>#include<cstdio>#include<cmath>using namespace std;int f[100010];int n,m,a;int main(){ cin>>n>>m; for(int i=1; i<=n; i++) { cin>>a; for(int j=m; j>a; j--) f[j]+=f[j-a]; f[a]++; } cout<<f[m]; return 0;}
· P1044 栈
思路
我们可以从 p o p pop pop 和 p u s h push push 两个操作入手。
设 f [ i ] [ j ] f[i][j] f[i][j] 表示 i i i 个数已入栈, j j j 个数未入栈.
有三种情况:
- 普通情况: f [ i ] [ j ] = f [ i + 1 ] [ j − 1 ] + f [ i − 1 ] [ j ] f[i][j]=f[i+1][j-1]+f[i-1][j] f[i][j]=f[i+1][j−1]+f[i−1][j] ( i − 1 i-1 i−1表示一个数出栈)
- i = = 0 i==0 i==0 ,表示没有数入栈,则不能出栈: f [ i ] [ j ] = f [ i + 1 ] [ j − 1 ] f[i][j]=f[i+1][j-1] f[i][j]=f[i+1][j−1];
- j = = 0 j==0 j==0 ,表示所有书都已经入栈或已经出栈,则形成一种情况: f [ i ] [ j ] = 1 f[i][j]=1 f[i][j]=1;
代码
#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,f[20][20];int main(){ cin>>n; for(int i=1; i<=n; i++) f[i][0]=1; for(int j=1; j<=n; j++) for(int i=0; i<=n; i++) { if(i==0) f[i][j]=f[i+1][j-1]; else f[i][j]=f[i-1][j]+f[i+1][j-1]; } cout<<f[0][n]; return 0;}
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月11日 10时41分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[Easy] 100. Same Tree
2019-03-04
[Easy] 136. Single Number
2019-03-04
PVE+集客AC+K2T-AP
2019-03-04
Jetson AGX Xavier硬件自启动
2019-03-04
网页实时显示已经运行了多少天 html+js
2019-03-04
判断移动端(手机)还是客户端(电脑)打开网页并跳转不同页面(首页)
2019-03-04
10分钟实现个人博客布置说说留言功能,Artitalk.js插件使用
2019-03-04
眼睛跟随鼠标转动的小黄人 html+css+js
2019-03-04
canvas贪吃蛇效果 html+css+js
2019-03-04
跟随鼠标移动的星星✩直接在页面引用✧✧✧
2019-03-04
poj 3660 (floyd)
2019-03-04
8086汇编语言21键电子琴
2019-03-04
找密码
2019-03-04
Python初级知识总结
2019-03-04
python|画图1(蛇)
2019-03-04
婚姻稳定匹配问题
2019-03-04
C++数据类型,运算符,注释
2019-03-04
C++语句,函数,标准输入输出
2019-03-04
平均年龄,,数字求和
2019-03-04