首页 > 其他分享 >一类适合记忆化搜索的区间dp

一类适合记忆化搜索的区间dp

时间:2024-03-27 23:25:12浏览次数:25  
标签:long 记忆 https 搜索 problem com dp define

https://www.luogu.com.cn/problem/P5752

https://codeforces.com/contest/598/problem/E

cf这个题考虑dp预处理,状态是三维的,转移是分割方案和所分块需要获得的巧克力数量。最后题目多次询问可以o(1)快速查询的

// Problem: E. Chocolate Bar
// Contest: Codeforces - Educational Codeforces Round 1
// URL: https://codeforces.com/contest/598/problem/E
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
# define int long long
#define ull unsigned long long
#define pii pair<int,int>

#define baoliu(x, y) cout << fixed << setprecision(y) << x
#define endl  "\n"
#define debug1(x) cerr<<x<<" "
#define  debug2(x) cerr<<x<<endl
const int N = 35;
const int M = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 998244353;
const double eps = 1e-8;
int n, m,k;
int dp[N][N][N*N];

int a[N];
//考虑区间dp,记忆化搜索
//提前预处理答案,O(1)查询
//30*30*900(状态)*(60*30)转移=48600000*30(1.2e8)
//不会跑满,加上记忆化和行列地位对等的剪枝
int dfs(int x,int y,int cnt){
	if(cnt==0||x*y==cnt)return 0;
	int &res=dp[x][y][cnt];
	//res=1e18;
	if(res!=-1)return res;
	
	if(dp[y][x][cnt]!=-1)return res=dp[y][x][cnt];
	res=1e18;
	for(int i=1;i<=x-1;i++){
		int now=cnt;
		for(int c=0;c<=now;c++){
			res=min(res,dfs(i,y,c)+dfs(x-i,y,now-c)+y*y);
		}
	}
	for(int i=1;i<=y-1;i++){
		int now=cnt;
		for(int c=0;c<=now;c++){
			res=min(res,dfs(x,i,c)+dfs(x,y-i,now-c)+x*x);
		}
	}
	dp[y][x][cnt]=res;
	return res;
}
void solve(){
	cin>>n>>m>>k;
	cout<<dfs(n,m,k)<<endl;
}
signed main() {
    cin.tie(0);
    
    ios::sync_with_stdio(false);
memset(dp,-1,sizeof dp);
    int t;
   cin>>t;
    // t=1;
    while (t--) {
solve();
    }
    return 0;
}

标签:long,记忆,https,搜索,problem,com,dp,define
From: https://www.cnblogs.com/mathiter/p/18100543

相关文章

  • TCP与UDP:传输层协议对比
    ......
  • ElasticSearch的搜索相关操作
    1、基本介绍Elasticsearch的查询是基于JSON风格的DSL(DomainSpecificLanguage)来实现的。常见的查询类型包括:查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(fulltext)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match、multi_match精确......
  • DDPG强化学习算法应用到TORCS仿真平台
    一、DDPG算法介绍1.前身DQN算法在介绍DDPG算法之前,需要首先明确它的前身DQN算法。DQN(DeepQ-Network)是一种用于强化学习的深度学习算法,由DeepMind公司开发。它结合了深度学习和Q-learning算法,旨在解决复杂环境下的强化学习问题。DQN算法在解决复杂环境下的强化学习问题方面取......
  • 详细解析记忆泊车的顶层技术原理
    详细解析记忆泊车的顶层技术原理附赠自动驾驶学习资料和量产经验:链接相对于记忆行车而言,记忆泊车MPA(MemoryParkingAssist)可以看成是停车场区域内的一个自动驾驶功能,可帮助用户按记忆的路线自动巡航并泊入车位或自动从车位泊出并巡航至泊出点。如下图表示了记忆行车和记忆泊......
  • ThreadPool-线程池使用及原理
    1.线程池使用方式示例代码://一池N线程Executors.newFixedThreadPool(int)//一个任务一个任务执行,一池一线程Executors.newSingleThreadExecutorO//线程池根据需求创建线程,可扩容,遇强则强Executors.newCachedThreadPool()//自定义线程池方式newThreadPoolExec......
  • 动态规划刷题(算法竞赛、蓝桥杯)--数字三角形(线性DP)
    1、题目链接:[USACO1.5][IOI1994]数字三角形NumberTriangles-洛谷#include<bits/stdc++.h>usingnamespacestd;intr;constintN=1010;inta[N][N];intmain(){ cin>>r; for(inti=1;i<=r;i++){ for(intj=1;j<=i;j++){ cin>>a[i][j]; ......
  • 最短Hamilton路径(状态压缩DP)
    给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1的最短Hamilton路径。Hamilton路径的定义是从 0 到 n−1不重不漏地经过每个点恰好一次。输入格式第一行输入整数 n。接下来 n 行每行 n 个整数,其中第 i 行第 j个整数表示点 i ......
  • 数据结构-二叉搜索树(Java实现)
    1.概念二叉搜索树也叫做二叉排序树,如果中序遍历,这棵二叉搜索树的结果就是有序的,它是具备以下性质的二叉树:若它的左子树不为空,则左子树上所有结点的值都小于根节点的值若它的右子树不为空,则右子树上所有结点的值都大于根节点的值它的左右子树也分别为二叉搜索树{5,3,......
  • 搜索引擎黑客语法
    逻辑符与(+或者空格)或(|)常用命令cache:www.baidu.com(寻找网页的缓存) allintext:hackingtools(在正文中寻找关键字)allintitle:医生和警察site:baidu.com(收集子域名)inurl:admin(关键字包含在url中)北极鲶鱼site:weibo.com因为互联网上的每一个资源都有url,所......
  • 管道(NamedPipeClientStream)连接报“访问路径被拒绝”
    问题:NamedPipeClientStream对象调用Connect(毫秒)时报“访问路径被拒绝”解决:在服务端(NamedPipeServerStream)中添加PipeSecurity对象SecurityIdentifiersecurityIdentifier=newSecurityIdentifier(WellKnownSidType.AuthenticatedUserSid,null);PipeSecuritypipeSecur......