洛谷 P1359 租用游艇(简单dp/Dijkstra)

简介: 算法

给出一张有向图和从第i条边到n的条边的所有花费,求最少的租金

思路:

dp想不明白,虽然我是在训练dp…

图论的话,单源最短路可以用迪杰斯特拉叭

也不需要堆优化,朴素的迪杰斯特拉也能过

3.png

#include<bits/stdc++.h>
using namespace std;
int a[202][202];
int g[202];
int n;
bool st[202];
void dijkstra()
{
    g[1]=0;
    for(int i=1;i<=n;i++)
    {
        int t=-1;
        for(int j=1;j<=n;j++)
        {
            if(st[j]==0&&(t==-1||g[t]>g[j]))
            {
                t=j;
            }
        }
        st[t]=1;
        for(int j=1;j<=n;j++)
        {
            g[j]=min(g[j],a[t][j]+g[t]);
        }
    }
}
int main()
{
    int i,j;
    cin>>n;
    memset(a,0x3f,sizeof a);
    memset(g,0x3f,sizeof g);
    memset(st,0,sizeof st);
    for(i=1;i<=n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            cin>>a[i][j];
        }
    }
    dijkstra();
    cout<<g[n]<<endl;
    return 0;
}

但其实这题其实不需要用到图,可以用更直观的普通DP方法。


p[i]表示到i站时的最少租金,m[j][i]表示j到i站的租金。

那么很简单的就能发现:

i = 2 to n

j = 1 to i

p [ i ] = min( p [ i ] , p [ j ] + m [ j ][ i ] )


#include<bits/stdc++.h>
using namespace std;
int dp[202],a[202][202];
int main()
{
    int n,i,j,t;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            cin>>a[i][j];
        }
        dp[i]=0x3f;
    }
    dp[1]=0;
    for(i=2;i<=n;i++)
    {
        for(j=1;j<i;j++)
            dp[i]=min(dp[i],dp[j]+a[j][i]);
    }
    cout<<dp[n]<<endl;
    return 0;
}
相关文章
|
算法 JavaScript
class074 背包dp-分组背包、完全背包【算法】
class074 背包dp-分组背包、完全背包【算法】
114 0
|
11月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
2318 0
高精度算法(加、减、乘、除,使用c++实现)
|
12月前
|
自然语言处理 数据安全/隐私保护
整合 200 多项相关研究,大模型终生学习最新综述来了
【9月更文挑战第26天】近年来,大型语言模型(LLMs)在自然语言处理、智能问答及内容生成等领域广泛应用。面对不断变化的数据、任务和用户偏好,LLMs需具备适应能力。传统静态数据集训练方式难以满足需求,因此提出了“终身学习”方法,使模型持续学习新知识并避免遗忘旧知识。最新综述文章整合200多项研究,将终身学习分为内部知识(连续预训练和微调)与外部知识(基于检索和工具)两大类,涵盖12种应用场景,探讨了模型扩展和数据选择等新兴技术。然而,终身学习也面临计算资源、知识冲突及数据安全等挑战。
326 6
|
存储 算法 Java
【DFS(深度优先搜索)详解】看这一篇就够啦
本文介绍了深度优先搜索(DFS)算法及其应用。DFS从某个顶点出发,深入探索图的每条路径,直到无法前进为止,然后回溯。文章详细解释了DFS的基本思想,并通过示例图展示了其执行过程。此外,文中还探讨了三种枚举方式:指数型枚举、排列型枚举和组合型枚举,并提供了具体的代码实现。最后,文章通过几道练习题帮助读者更好地理解和应用DFS算法。
8662 19
【DFS(深度优先搜索)详解】看这一篇就够啦
【洛谷 P2089】烤鸡(循环枚举)
烤鸡问题探讨了如何组合10种配料达成特定美味程度。给定正整数$n$代表美味程度,程序需列出所有使得配料总和等于$n$的方案。样例输入11对应10种配料的不同组合,输出显示了10种符合条件的方案。代码通过暴力枚举实现,AC代码展示了如何遍历所有可能的配料质量组合来找到答案。对于100%的数据,$n\leq5000$。
109 0
|
11月前
|
数据采集 机器学习/深度学习 人工智能
[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
246 0
|
消息中间件 Java Maven
Java整合RabbitMQ实现生产消费(7种通讯方式)
Java整合RabbitMQ实现生产消费(7种通讯方式)
442 0
|
Java 数据库 Spring
@Transactional 失效场景介绍
【2月更文挑战第5天】
1166 1
@Transactional 失效场景介绍
|
人工智能
【洛谷】P3853 路标设置
洛谷P3853 路标设置
108 0
【洛谷】P3853 路标设置
|
机器学习/深度学习 算法 定位技术
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(15)
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(15)
218 0