首页 > 其他分享 >动态规划(线性)

动态规划(线性)

时间:2024-02-06 11:35:12浏览次数:25  
标签:std include const int namespace 线性 using 动态 规划

898. 数字三角形

https://www.acwing.com/problem/content/900/

 

 
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=510,INF=1e9;
int n;int a[N][N],p[N][N];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            cin>>a[i][j];
    //初始化,便于后面更新
    memset(p,-0x3f3f3f3f,sizeof p);
    //切记头一个初始化
    p[1][1]=a[1][1];
    
    for(int i=2;i<=n;i++)
        for(int j=1;j<=i;j++)
            p[i][j]=max(p[i-1][j-1]+a[i][j],p[i-1][j]+a[i][j]);
    //最大值在最后一排,但不一定是最后一个,需要求解
    int res=-INF;
    for(int i=1;i<=n;i++) res=max(res,p[n][i]);
    cout<<res<<endl;
    
    return 0;
}

 最长子序列

https://www.acwing.com/problem/content/897/

(可以不相邻取子串)

#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int n;int a[N],p[N];
int main()
{
   cin>>n;
   for(int i=1;i<=n;i++)
    cin>>a[i];
    
    for(int i=1;i<=n;i++)
    {
        p[i]=1;//只有a[i]一个数
        for(int j=1;j<i;j++)
        {
            if(a[j]<a[i]) p[i]=max(p[i],p[j]+1);
        }
    }
    
    int ans=0;
    for(int i=1;i<=n;i++) ans=max(ans,p[i]);
    
    cout<<ans<<endl;
    return 0;
}

求路径

#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int n;int a[N],p[N],s[N];
int main()
{
   cin>>n;
   for(int i=1;i<=n;i++)
    cin>>a[i];
    
    for(int i=1;i<=n;i++)
    {
        p[i]=1;//只有a[i]一个数
        s[i]=0;
        for(int j=1;j<i;j++)
        {
            if(a[j]<a[i]) {
                if(p[j]+1>p[i])
                {
                    p[i]=p[j]+1;
                    s[i]=j;//记录上一个位置的下标
                }
            }
        }
    }
    
    int ans=0;int k;
    for(int i=1;i<=n;i++){
        if(p[i]>ans){
        ans=p[i];
        k=i;
        }
    } 
    
    cout<<ans<<endl;
    
    for(int i=k;i!=0;i=s[i])//倒叙遍历输出
        cout<<a[i]<<" ";
        
    return 0;
}

最长公共子序列(字符串)

https://www.acwing.com/problem/content/899/

#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
char a[N],b[N];
int p[N][N];
int n,m;
int main()
{
    cin>>n>>m;
    scanf("%s%s", a+1, b+1);
    
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            p[i][j]=max(p[i-1][j],p[i][j-1]);
            if(a[i]==b[j]) p[i][j]=max(p[i][j],p[i-1][j-1]+1);
        }
    }
        
    cout<<p[n][m]<<endl;
            
    return 0;
}

 分组DP

https://www.acwing.com/problem/content/284/

#include<iostream>
using namespace std;
const int N=1010;
int sum[N];int a[N];int p[N][N];
int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
    for(int len=2;len<=n;len++){//区间长度
        for(int i=1;i+len-1<=n;i++){//枚举区间开头
            int j=i+len-1;//区间结尾
            p[i][j]=1e9+10;
            for(int k=i;k<j;k++)//区间内不同分段
            {
                p[i][j]=min(p[i][j],p[i][k]+p[k+1][j]+sum[j]-sum[i-1]);
            }
        }
    }
    cout<<p[1][n]<<endl;
    return 0;
}

 

 

 

标签:std,include,const,int,namespace,线性,using,动态,规划
From: https://www.cnblogs.com/daimazhishen/p/18003542

相关文章

  • 静态库和动态库
    一、库的定义库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类。二、库的好处方便保密;便于部署和分发三、静态库和动态库的区别静态库在程序的链接阶段被复制到程序中;动态库在程序运行时被系统动态地加载到内......
  • 2-3动态计算图
    本节我们将介绍Pytorch的动态计算图。包括:动态计算图简介计算图中的Function计算图和反向传播叶子节点和非叶子节点计算图在TensorBorad中的可视化1.动态计算图简介Pytorch的计算图是由节点和边组成,节点表示张量或者Function,边表示张量和Function之间的依赖关系。P......
  • springboot之ImportBeanDefinitionRegistrar动态注入
    SpringBoot中的使用在SpringBoot内置容器的相关自动配置中有一个ServletWebServerFactoryAutoConfiguration类。该类的部分代码如下:@Configuration(proxyBeanMethods=false)@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)@ConditionalOnClass(ServletRequest.class)@Con......
  • 【动态规划】最长公共子串
    目录题目应用1:最长公共子串题目解题思路边界条件状态转移代码实现应用2:Leetcode718.最长重复子数组题目解题思路代码实现解题思路方法一:动态规划初始条件状态转移复杂度方法二:滑动窗口复杂度代码实现题目应用1:最长公共子串题目给定两个字符串text1和text2,返回这两个......
  • 安卓动态链接库文件体积优化探索实践
    背景介绍应用安装包的体积影响着用户下载量、安装时长、用户磁盘占用量等多个方面,据GooglePlay统计,应用体积每增加6MB,安装的转化率将下降1%。   安装包的体积受诸多方面影响,针对dex、资源文件、so文件都有不同的优化策略,在此不做一一展开,本文主要记录了在研发时针对动态......
  • Drvsetup.dll 是 Windows 操作系统中的一个动态链接库文件,用于设备驱动程序的安装和配
     Drvsetup.dll是Windows操作系统中的一个动态链接库文件,用于设备驱动程序的安装和配置过程中。该文件通常位于C:\Windows\System32文件夹下。Drvsetup.dll主要负责设备驱动程序的安装和配置过程中的一些核心功能,包括驱动程序的复制、注册、配置和卸载等。在设备驱动程序......
  • drvstore.dll 是 Windows 操作系统中的一个动态链接库文件
    drvstore.dll是Windows操作系统中的一个动态链接库文件,用于存储和管理设备驱动程序的信息。它通常位于系统目录(如C:\Windows\System32)下。drvstore.dll的主要作用是维护设备驱动程序的备份和安装信息,以便在需要时能够快速找到并加载正确的驱动程序。当用户连接新设备或更新设......
  • leetcode 152 动态规划
    Problem:152.乘积最大子数组目录思路解题方法复杂度Code思路动态规划的题型见到了就记录一下吧,接触到的并不多,也不太会。这道题主要是有负数,所以需要维护两个变量,我们希望最大值尽可能大,也希望负数最小值尽可能小,因为如果下一位是负数,相乘可以变成正数,最小值就会变成最大值......
  • 线性回归实现示例
    假设我们的基础模型是y=wx+b,其中w和b均为参数,我们使用y=3x+0.8来构造数据x、y,所以最后通过模型应该能够看得出w和b分别接近3和0.8。实现过程:1、准备数据2、计算预测值3、计算损失,把参数的梯度置为0,进行反向传播4、更新参数代码示例:importtorchimportmatplotlib......
  • (12)动态生成菜单及绑定自定义事件
    varAddCollctMenus:ArrayOfTMenuItem;//动态菜单 procedureTForm1.Button5Click(Sender:TObject);Vari,AddCollctMenuCount:Integer;BeginAddCollctMenuCount:=Length(AddCollctMenus)-1;Fori:=0ToAddCollctMenuCountDoBeginFreeAndNil......