动态规划:高维DP
例子当然是王八棋这道题,这道题以前是写烂了
先来一个大暴力,zlw教的暴力~~
#include<iostream>
using namespace std;
const int maxn=,maxm=;
int a[maxn],b[];
int n,m;
int ans=;
int MAX(int x,int y)
{
return x>y?x:y;
}
void dfs(int dp,int pos,int tmp)
{
ans=MAX(ans,tmp);
for(int i=;i<=;i++)
if(b[i])
{
b[i]--;
dfs(dp+,pos+i,tmp+a[pos+i]);
b[i]++;
}
}
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=m;i++)
{
int x;
cin>>x;
if(x==) b[]++;
if(x==) b[]++;
if(x==) b[]++;
if(x==) b[]++;
}
dfs(,,a[]);
cout<<ans<<endl;
return ;
}
当时真是幼稚地连搜索都写不利索
多维动态规划的意思就是状态有好几个维度,我们在定义状态的时候要开多维数组
这道题里面四种卡牌用了多少了是四种可行的状态,还有一个是当前走到了哪个格子,作为阶段
f[][][][][],然后就是这样了,MLE
这道题的思路是把阶段这一维度压掉,因为其可以用其他的状态来表示
一般的想法是把别的状态压掉,其实同样也能A掉这道题
压掉状态还是自然一些,压掉阶段就不太自然了
即使看上去很自然的样子
总的来说,好题一道,出题人无敌
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=0x7f7f7f7f;
const int maxn=,maxm=;
int n,m,a,b,c,d,ans;
int t[maxn];
int f[][][][];
int main()
{ scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&t[i]);
int x;
for(int i=;i<=m;i++)
{
scanf("%d",&x);
if(x==) a++;
if(x==) b++;
if(x==) c++;
if(x==) d++;
}
for(int i=;i<=a;i++)
for(int j=;j<=b;j++)
for(int k=;k<=c;k++)
for(int l=;l<=d;l++)
{
if(i!=) f[i][j][k][l]=max(f[i][j][k][l],f[i-][j][k][l]);
if(j!=) f[i][j][k][l]=max(f[i][j][k][l],f[i][j-][k][l]);
if(k!=) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k-][l]);
if(l!=) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k][l-]);
f[i][j][k][l]+=t[i+*j+k*+l*+];
}
printf("%d",f[a][b][c][d]);
return ;
}
这是一个5D/0D压成了4D/0D的动态规划?
动态规划:高维DP的更多相关文章
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- 【学时总结】◆学时·VII◆ 高维DP
◆学时·VII◆ 高维DP 自学之余,偶遇DP…… ◇ 算法概述 顾名思义——一种处理多方面状态的DP,这种DP特点是……每一维的大小都不算太大(不然用dp数组存储下来内存会炸),而且枚举时容易超时… ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
- 【学习笔记】动态规划—各种 DP 优化
[学习笔记]动态规划-各种 DP 优化 [大前言] 个人认为贪心,\(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT).这篇文章也是花了我差不多一个月时间才全部完成 ...
- Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings)
Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings) 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子 ...
- Leetcode之动态规划(DP)专题-474. 一和零(Ones and Zeroes)
Leetcode之动态规划(DP)专题-474. 一和零(Ones and Zeroes) 在计算机界中,我们总是追求用有限的资源获取最大的收益. 现在,假设你分别支配着 m 个 0 和 n 个 1. ...
- Leetcode之动态规划(DP)专题-486. 预测赢家(Predict the Winner)
Leetcode之动态规划(DP)专题-486. 预测赢家(Predict the Winner) 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端 ...
- Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II)
Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II) 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n ...
- Leetcode之动态规划(DP)专题-198. 打家劫舍(House Robber)
Leetcode之动态规划(DP)专题-198. 打家劫舍(House Robber) 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互 ...
- Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)
Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 股票问题: 121. 买卖股票的最佳时机 122. 买卖股票的最 ...
随机推荐
- Lambda方式左连接有Linq方式左连接
网上查到的直接使用Join+DefaultIfEmpty的方式是错误的,实际生成SQL是两表先内联接,然后再LEFT JOIN.经过查证,参考资料,最终得到如下两种方式的左连接写法: public v ...
- 台湾ML笔记--1.1什么时候适合使用ML
适用情况: 1 exists some 'underlying pattern' to be learned --so 'performance measure' can be imporoved 例 ...
- python内置模块[sys,os,os.path,stat]
python内置模块[sys,os,os.path,stat] 内置模块是python自带功能,在使用内置模块时,需要遵循 先导入在 使用 一.sys 对象 描述 sys.argv 命令行参数获取,返 ...
- java通过句柄访问对象
在Java里,任何东西都可看作对象.尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handle),有的人将其称作一个“引用”,甚至一个“指针”. 主类型的数据成员可直接初始化, ...
- Qt BarChart实践
按照帮助文档编写 运行截图 上代码 #include "widget.h" #include "ui_widget.h" Widget::Widget(QWid ...
- Struts2(五.用户注册的实现及整合Action的配置方法)
一.用户注册功能 register.jsp页面 若是jquery ajax方式提交给action,还要回到jquery,控制权在jquery若是表单方式提交给action,控制权交给action &l ...
- PostgreSQL基本配置
记一下Postgresql的基本操作,在Ubuntu下使用apt-get安装是不会像MySQL那样都配置好了,而是要安装后再配置: 1. 基本安装 # 安装postgresql和pgadmin(一个管 ...
- node gyp的问题
解决 binding.gyp not found (xxx/xxx/xxx) while trying to load binding.gyp 问题 在使用ccap图形验证码模块时遇到这个问题 Err ...
- Hibernate 查询,返回结果设置到DTO
1:原生sql的查询,返回结果设置到DTO: Query query = sessionFactoryRtData.getCurrentSession().createSQLQuery(hql.toS ...
- markdown(自己看)
https://www.cnblogs.com/james-lee/p/6847906.html https://maxiang.io/