首页 > 其他分享 >洛谷 P1359 租用游艇 C语言 记忆化搜索

洛谷 P1359 租用游艇 C语言 记忆化搜索

时间:2024-12-07 08:59:31浏览次数:6  
标签:洛谷 mem ll 游艇 C语言 站点 P1359 出租 include

题目:

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

题目描述

长江游艇俱乐部在长江上设置了 n 个游艇出租站 1,2,⋯ ,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 i 到游艇出租站 j 之间的租金为 r(i,j)(1≤i<j≤n)。试设计一个算法,计算出从游艇出租站 1 到游艇出租站 n 所需的最少租金。

输入格式

第一行中有一个正整数 n,表示有 n 个游艇出租站。接下来的 n−1 行是一个半矩阵 r(i,j)(1≤i<j≤n)。

输出格式

输出计算出的从游艇出租站 1 到游艇出租站 n 所需的最少租金。

思路:

1.将站点i到达站点j的费用存入二维数组。

2.状态转移方程,从站点1开始出发,会发现每次都会有n-i个站点可以走,所以需要一个循环,和一个参数来限制走的站点的范围。

代码如下:

#include<iostream> 
#include<string>
#include<climits>
int n;  
using namespace std;
typedef long long ll;
ll mem[201];//记录到达第x层花费最小花费
ll money[201][201]; //从行到列就是从当站点i到站点j花费的钱 
ll dfs(ll x,ll end)//x为当前站点,end为最多可以上的楼层 
{
	ll sum = INT_MAX;
	if(mem[x])
	return mem[x];
	if(x == n)
	return 0;
	 
	for(int i = 1; i <= end ; i++)
	{
		sum = min(sum,dfs(x + i,end - i) + money[x][x + i]); 
	}
	
	mem[x] = sum;
	return sum;
 } 
int main(void) 
{
	cin >> n;
	for(ll i = 1 ; i <= n ; i++)
	{
		for(ll j = i + 1 ; j <= n ; j++)
		{
			cin >> money[i][j];	
		}
	}
	 cout << dfs(1,n-1);
    return 0; 
}

标签:洛谷,mem,ll,游艇,C语言,站点,P1359,出租,include
From: https://blog.csdn.net/zqystca/article/details/144300495

相关文章

  • 洛谷 P1553 数字反转(升级版) C语言 stl
    题目:https://www.luogu.com.cn/problem/P1553题目背景以下为原题面,仅供参考:给定一个数,请将该数各个位上数字反转得到一个新数。这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分......
  • C语言专题之get相关函数介绍
    欢迎浏览,以下是对C语言中相关“get”函数结合函数原型的详细介绍:一、getchar函数 1.函数原型:intgetchar(void); 2.详细介绍:   1.这个函数不需要参数,它从标准输入流(通常是键盘输入)读取一个字符。   2.函数返回值为读取到的字符的ASCII码值(以int类型返......
  • C语言:指针基础指导
    1:任何一个地址变量,在没有被赋值之前,没有得到实际的变量地址之前,不能通过*去访问任何数据。一.理解一个变量的存储过程和原理(必须清楚掌握)1、两个操作:(1)inta:在栈中定义了一个变量a,并且在内存中开辟了一个int类型大小的空间,即4个字节,然后让a指向这篇空间,也就是这篇空间,计......
  • 洛谷P1305 新二叉树(c嘎嘎)
    题目链接:P1305新二叉树-洛谷|计算机科学教育新生态题目难度:普及刷题心得:做了几道这种类型的题都不用建树就可以解决,基本上还是利用好树的结构,例如这道题求前序序列(根左右)是可以用递归来求的。无非就是先从根出发,递归遍历左子树,递归遍历右子树,遇到 *直接返回就行了......
  • 洛谷解题日记14||前缀和,差分与离散化
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(){intn;cin>>n;//读取区间的个数nvector<pair<int,int>>intervals(n);//存储区间的起点和终点,使用pair类型//读......
  • C语言第六部分(循环结构)
    C语言循环结构什么是循环代码的重复执行,就叫做循环。循环的分类无限循环:其实就是死循环,程序设计中尽量避免无限循环。程序中的无限循环必须可控。有限循环:循环限定循环次数或者循环的条件。循环的构成循环条件循环体当型循环的实现特点:先判断,后执行,如果条件不满足,......
  • 初探C语言|浅谈函数的递归
    文章目录1.什么是递归?2.递归的两个必要条件代码示例3.两个例题(阶乘和斐波那契)发现问题为什么呢?stackoverflow(栈溢出)常规写法(迭代)4.递归与迭代相比较欢迎讨论:如有错误或不足,欢迎指正和建议,本人主打“听劝”。当然,如有疑问,也期待你在评论区留言互动。点赞+关注:如果......
  • (王道练习代码仓库)408考研真题2022 年42题————C语言
    题目:代码实现:#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>typedefintElemType;typedefstruct{ ElemType*elem; intTableLen;}SSTable;voidST_Init(SSTable&ST,intlen)//申请空间,并进行随机数生成{ ST.Ta......
  • 洛谷题单指南-线段树-P1637 三元上升子序列
    原题链接:https://www.luogu.com.cn/problem/P1637题意解读:统计序列a[1]~a[n]中三元上升子序列的个数,三元上升子序列是指对于1<=i<j<k<=n有a[i]<a[j]<a[k],(a[i],a[j],a[k])成为一组上升子序列。解题思路:1、先思考一下暴力,通过三重循环枚举i,j,k找到所有i<j<k时符合a[i]<a[j]<a[k]......
  • 洛谷 P11362 [NOIP 2024] 遗失的赋值
    题目传送门如果没有其他限制,那么一个二元限制可能出现的方案数为\(v^2\)。考虑\(\{x_n\}\)的一个区间,设其中能放\(t\)个二元限制,它的左右端点有一元限制,求这\(t\)个限制的方案数。设这个数为\(f(t)\)。如果第一个二元限制的\(a\)与左端点\(i\)处的\(x\)值相同,那......