luogu1541题解 记忆化搜索
来源:互联网 发布:算法导论中文版pdf 编辑:程序博客网 时间:2024/06/04 01:34
记忆化搜索,dfs形式的dp
从最后一个点向前f[位置][第一种卡][第二种卡][第三种卡]
本来用dp过了,突发奇想这么写,大佬不要吐槽时空的浪费
```
usingnamespacestd;int n,m,a[360],l[6],f[360][41][41][41];intMAX(int x,int y,int z,int c){ x=max(x,y); z=max(z,c); return max(x,z);}intdfs(int e,int x,int y,int z,int c,int aa,int bb,int cc,int dd){ aa=bb=cc=dd=0;//发现这四个变量不用递归形式会乱,就定义在递归里if(f[e][x][y][z]!=0)return f[e][x][y][z]; if(e-1>0&&x-1>=0){ aa=dfs(e-1,x-1,y,z,c,0,0,0,0)+a[e]; } if(e-2>0&&y-1>=0){ bb=dfs(e-2,x,y-1,z,c,0,0,0,0)+a[e]; } if(e-3>0&&z-1>=0){ cc=dfs(e-3,x,y,z-1,c,0,0,0,0)+a[e]; } if(e-4>0&&c-1>=0){ dd=dfs(e-4,x,y,z,c-1,0,0,0,0)+a[e]; } f[e][x][y][z]=MAX(aa,bb,cc,dd); return f[e][x][y][z];}intmain(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]); } for(int i=1;i<=m;i++){scanf("%d",&l[0]); l[l[0]]++; } f[1][0][0][0]=a[1];printf("%d\n",dfs(n,l[1],l[2],l[3],l[4],0,0,0,0));return0;}
```
- luogu1541题解 记忆化搜索
- 洛谷P2672 售货员题解 (记忆化搜索,状压DP)
- 【记忆化搜索】2017.5.21杂题[排列]题解
- 记忆化搜索例题
- PKU1088---记忆化搜索
- PKU1088 记忆化搜索
- HDU1078 记忆化搜索
- HDU1501 记忆化搜索
- HDU1978 记忆化搜索
- poj1661 记忆化搜索
- zoj1107记忆化搜索
- poj1191(记忆化搜索)
- 滑雪 记忆化搜索
- hdu3779---记忆化搜索
- hdu2452---记忆化搜索
- 【记忆化搜索】滑雪
- 记忆化搜索 HDU1501
- 记忆化搜索,poj1088
- java多线程概述
- #382 div.2
- 朱自清
- java笔记四——接口与多态
- ajax同步处理(使得JS按顺序执行)
- luogu1541题解 记忆化搜索
- Java设计模式——策略模式
- Angular JS配置时先配置run后配置config的疑问
- Hibernate——初次见面
- Redis精华篇
- 最新总结
- xp系统下wireshark抓包工具的使用方法
- layui富文本编辑器注意点
- java关于时区的获取的几种方式