备战蓝桥杯---动态规划(入门2)

今天主要介绍区间dp比较难的题:

下面是分析:

我们如果先固定点V0,那我们得去枚举两个点使它构成三角形,同时求目标值也比较难确定(起始与终止都带0),于是我们考虑固定边,我们固定v0v6然后去枚举点,这样子始终在v0--v6上剖分,不会都带0.

因此,我们令fij为vi--vj的最大剖分(vi与vj一定有边),目标求f0n;

转移方程为:fij=min(fik+fkj+vi*vj*vk,fij)

终止条件:fii+1=0

下面是AC代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
long long n,dp[60][60],a[60];
long long f(long long i,long long j){
    
    if(j-i==1) return dp[i][j]=0;
    if(dp[i][j]!=-1) return dp[i][j];
    dp[i][j]=f(i,i+1)+f(i+1,j)+a[i]*a[j]*a[i+1];
    for(long long k=i+2;k<=j-1;k++){
        dp[i][j]=min(dp[i][j],f(i,k)+f(k,j)+a[i]*a[j]*a[k]);
    }
    return dp[i][j];
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    memset(dp,-1,sizeof(dp));
     if(n<3) cout<<0;
     else cout<<f(1,n);
}

接题:

下面是分析:

显然,我们要么选最强的,要么选最弱的(如果它的马比自己所有马都强,选最弱的。

若有比他强的,选最强的,因为对手从强道弱,所以选任意一个比他强的都可以。

和最强马相等时,无法判断但一定从最强与最弱选一个,于是我们用区间dp.

每次取两个端点,中间就是连续区间,

我们令fij为某一论ai---aj的马可以赢的最大钱数。

我们发现:j-i=n-k-1;

易得转移方程为:fij=max(fi+1j+ai与bk,fij-1+aj与bk)

这里采用记忆化搜索,如果要for的话应该从最后一轮反向开始。

下面是AC代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,tian[2010],qi[2010],dp[2010][2010];
bool cmp(int a,int b){
	return a>b;
}
int cmp1(int a,int b){
	if(a>b){
		return 200;
	}
	if(a==b){
		return 0;
	}
	if(a<b){
		return -200;
	}
}
int f(int i,int j,int k){
	if(i==j) return dp[i][j]=cmp1(tian[i],qi[k]);
	if(dp[i][j]!=-1) return dp[i][j];
	dp[i][j]=max(f(i+1,j,n+i+1-j)+cmp1(tian[i],qi[k]),f(i,j-1,n+i+1-j)+cmp1(tian[j],qi[k]));
	return dp[i][j];
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) scanf("%d",&tian[i]);
	for(int i=1;i<=n;i++) scanf("%d",&qi[i]);	
	sort(tian+1,tian+n+1,cmp);
	sort(qi+1,qi+n+1,cmp);
	memset(dp,-1,sizeof(dp));
	int k=n+1-n;
	cout<<f(1,n,k);
}
相关推荐
Shadow(⊙o⊙)1 分钟前
信号1.0,信号概念、signal()处理、前后台进程、闹钟设置、初识信号三张表。
linux·运维·服务器·开发语言·c++
nazisami4 分钟前
深入学习C++11
c++·c++11
(Charon)7 分钟前
【C++ 面试高频:STL 容器 vector、map、unordered_map 总结】
开发语言·c++·面试
我是一颗柠檬7 分钟前
【Java项目技术亮点】滑动窗口限流算法
java·开发语言·算法
无限码力10 分钟前
华为非AI方向笔试真题 - 楼内救人
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为算法题
一切皆是因缘际会11 分钟前
隐层表征解构:LLM感知式幻觉稀疏成因
算法·数学建模·ai·架构
Irissgwe11 分钟前
二叉树进阶
数据结构·c++·算法·c·二叉搜索树
无限码力13 分钟前
华为非AI方向笔试真题 - 容器镜像平均大小统计
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为非ai笔试真题·华为0612非ai笔试真题
hairenwangmiao13 分钟前
c++排序(第一章----桶排序与sort排序)
数据结构·c++·排序
郝学胜-神的一滴14 分钟前
[简化版 GAMES 101] 计算机图形学 13:从光栅化到着色——赋予三维像素光影灵魂
c++·计算机视觉·unity·godot·图形渲染·opengl·unreal