当前位置: 首页 > news >正文

C++线性DP-最优解问题、方案数问题

滑翔翼

#include <bits/stdc++.h>
using namespace std;
int a[5005];
int f[5005],f2[5005];
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;for(int i=1; i<=n; i++) cin>>a[i];for(int i=1; i<=n; i++){f[i]=1;for(int j=i-1; j>=1; j--){if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);}}for(int i=n; i>=1; i--){f2[i]=1;for(int j=i+1; j<=n; j++){if(a[j]<a[i]) f2[i]=max(f2[i],f2[j]+1);}}int ans=1;for(int i=1; i<=n; i++) ans=max(ans,max(f[i],f2[i]));cout<<ans;return 0;
}

#include <bits/stdc++.h>
using namespace std;
int a[5005];
int f[5005],f2[5005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) cin>>a[i];
    for(int i=1; i<=n; i++)
    {
        f[i]=1;
        for(int j=i-1; j>=1; j--)
        {
            if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);
        }
    }
    for(int i=n; i>=1; i--)
    {
        f2[i]=1;
        for(int j=i+1; j<=n; j++)
        {
            if(a[j]<a[i]) f2[i]=max(f2[i],f2[j]+1);
        }
    }
    int ans=1;
    for(int i=1; i<=n; i++) ans=max(ans,max(f[i],f2[i]));
    cout<<ans;
    return 0;
}
最大上升子序列和

#include <bits/stdc++.h>
using namespace std;
int a[1005];
int f[1005];
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;for(int i=1; i<=n; i++) cin>>a[i];for(int i=n; i>=1; i--){for(int j=i; j<=n; j++){if(a[j]>a[i]) f[i]=max(f[i],f[j]);}f[i]+=a[i];}int ans=0;for(int i=1; i<=n; i++){//cout<<i<<":"<<f[i]<<" "<<f2[i]<<'\n';ans=max(ans,f[i]);}cout<<ans;return 0;
}

#include <bits/stdc++.h>
using namespace std;
int a[1005];
int f[1005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) cin>>a[i];
    for(int i=n; i>=1; i--)
    {
        for(int j=i; j<=n; j++)
        {
            if(a[j]>a[i]) f[i]=max(f[i],f[j]);
        }
        f[i]+=a[i];
    }
    int ans=0;
    for(int i=1; i<=n; i++)
    {
        //cout<<i<<":"<<f[i]<<" "<<f2[i]<<'\n';
        ans=max(ans,f[i]);
    }
    cout<<ans;
    return 0;
}
开餐馆

#include <bits/stdc++.h>
using namespace std;
int n,k;
int m[105],p[105];
int s[105];
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>k;for(int i=1; i<=n; i++) cin>>m[i];for(int i=1; i<=n; i++) cin>>p[i];for(int i=1; i<=n; i++){s[i]=p[i];for(int j=1; j<i; j++){if(m[j]+k<m[i]) s[i]=max(s[i],s[j]+p[i]);else break;	}}int ans=0;for(int i=1; i<=n; i++) ans=max(ans,s[i]);cout<<ans;return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,k;
int m[105],p[105];
int s[105];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>k;
    for(int i=1; i<=n; i++) cin>>m[i];
    for(int i=1; i<=n; i++) cin>>p[i];
    for(int i=1; i<=n; i++)
    {
        s[i]=p[i];
        for(int j=1; j<i; j++)
        {
            if(m[j]+k<m[i]) s[i]=max(s[i],s[j]+p[i]);
            else break;    
        }
    }
    int ans=0;
    for(int i=1; i<=n; i++) ans=max(ans,s[i]);
    cout<<ans;
    return 0;
}

相关文章:

  • Design Compiler:解组(Ungroup)
  • 自编码模型原理
  • Python中提取图片特征的指南
  • 2.2 订阅话题
  • 在Ubuntu linux终端写文件的方法
  • DataWhale-零基础网络爬虫技术(一)
  • 互联网大厂Java求职面试:云原生架构与微服务设计中的复杂挑战
  • sql列中数据通过逗号分割的集合,对其中的值进行全表查重
  • Unity 对象层级处理小结
  • 关于allegro 导入网表报错:Unable to find pin name in问题的解决
  • Java 复习题选择题(1)(Java概述)
  • 三维重建 —— 5. 双目立体视觉
  • 多线程与多进程技术全景对比
  • Docker 部署 RomM 指南:打造私有戏库与即点即玩系统
  • 基于“数智立体化三维架构”框架的医疗数智化机制研究
  • 2025.06.11-华子第三题-300分
  • QEMU源码全解析 —— 块设备虚拟化(30)
  • 华硕笔记本怎么装win11系统_华硕笔记本装win11专业版图文教程
  • 如何在 Elementary OS 上安装最新版本的 VirtualBox
  • YOLOv3 训练与推理流程详解-结合真实的数据样例进行模拟
  • 茶文化建设网站的意义/济南做seo的公司排名
  • WordPress可以做政府网站吗/核心关键词是什么意思
  • 网站效果图可以做动态的嘛/网站优化排名优化
  • asp网站连接数据库/推广网络推广
  • 域名弄好了网站怎么建设/广告平台有哪些
  • 贵阳做网站找哪家好/好用的推广平台