【DP】AGC004 Salvage Robots

该博客介绍了如何使用动态规划(DP)解决AGC004竞赛中的救援机器人问题。作者从终点移动的角度出发,讨论了如何计算在矩形区域内移动的最小代价,并阐述了如何拓展矩形以及计算边界相交时的转移状态。
摘要由CSDN通过智能技术生成

分析:

DP水题

反过来考虑终点在移动

设终点移动过的最左,右,上,下的点,构成一个矩形,显然在矩形内部移动是没有代价的。

所以只需要考虑如何拓展这个矩形:如果矩形左移一格,那么右侧一部分点就再也到不了了,如果矩形上移一格,那么下侧一部分点就再也到不了了,这些点的数量可以统计出来。

然后求出终点的移动区间为整个区间时,至少删了多少个点。

转移很简单,分当前矩形是否与边界相交即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define SF scanf
#define PF printf
#define MAXN 105
using namespace std;
typedef long long ll;
int n,m,sum,ex,ey;
char s[MAXN][MAXN];
short int dp[MAXN][MAXN][MAXN][MAXN];
int addx[MAXN][MAXN][MAXN],addy[MAXN][MAXN][MAXN];
ll add1(int new1,int d,int l,int r){
   
	int l1=r-ey+1;
	int r1=l+m-ey;
	if(new1>d)
		return addx[new1][l1][r1];
	else
		return addx[new1][l1][l-1]+addx[new1][r+1][r1];
}
ll add2(int new1,int u,int l,int r){
   
	int l1=r-ey+1;
	int r1=l+m-ey;
	
在Jupyter Notebook中实现资产折旧的自定义函数,首先需要导入必要的数学库,如`numpy`,然后我们可以定义三个不同的折旧计算函数,每个函数对应一种常见的折旧方法: 1. 直线折旧法( Straight-Line Depreciation): ```python import numpy as np def straight_line_depreciation(cost, useful_life, salvage_value): """计算直线折旧法""" depreciation_per_period = (cost - salvage_value) / useful_life return depreciation_per_period ``` 2. 双倍余额递减法(Double Declining Balance Depreciation): ```python def double_dbd(cost, useful_life, salvage_value): """计算双倍余额递减法""" annual_rate = 2 / useful_life balance = cost for _ in range(useful_life): depreciation = balance * annual_rate yield depreciation balance -= depreciation yield salvage_value ``` 3. 年数总和法(Sum of Years' Digits Depreciation): ```python def syd(cost, useful_life, salvage_value): """计算年数总和法""" digits_sum = sum(range(1, useful_life + 1)) rate = (useful_life - 1) / digits_sum accumulated_depreciation = 0 for i in range(1, useful_life + 1): this_year_depreciation = (cost - accumulated_depreciation) * rate accumulated_depreciation += this_year_depreciation yield this_year_depreciation yield salvage_value ``` 为了检查函数的调用是否正确,你可以提供一些示例输入,并打印出结果,比较它们是否符合预期的折旧值。例如: ```python # 示例数据 cost = 10000 salvage_value = 2000 useful_lives = [5, 7, 10] # 对于每种方法,设定不同的使用年限 # 调用函数并检查结果 for method_name, function in {'Straight Line': straight_line_depreciation, 'Double Declining Balance': double_dbd, 'Sum of Years\' Digits': syd}.items(): for life in useful_lifes: result = function(cost, life, salvage_value) if isinstance(result, tuple): # 如果是生成器,需要迭代得到所有值 print(f"{method_name} with {life} years: ", list(result)) else: print(f"{method_name} with {life} years: ", result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值