1632 - Alibaba(DP)

该题过的人不多,但是实际上并不难 。首先,不难用贪心的方法证明,起点一定要选最快消失的点, 所有宝藏地点的坐标从小到大排列,因为起点固定且获取宝藏的时间忽略不计,所以不难发现任意时刻,已经拾取的点一定是一个连续的区间, 因此可以用d[i][j][k]表示拾取完(i,j),且当前在位置k(k=0表示在i点,k=1表示在j点) 。

怎么样? 是不是很眼熟?对,该题和例题 《修缮长城》几乎一模一样, 只不过该题稍有不同,所以不妨在递归函数上增加一个变量t维护已经花费的时间,以此来判断是否该宝藏已经消失 。因此只有两个决策,向左走或者向右走,详情请见紫书P293  。 状态有n^2个因此时间复杂度O(n^2), 但是实际上没有那么大,因为有很多“消失”的可能性都被剪枝了 。  

#include<bits/stdc++.h>
using namespace std;
const int maxn = 10000 + 10;
const int INF = 2000000000;
int n,kase = 0 ,a[maxn],b[maxn],d[maxn][maxn][2],vis[maxn][maxn][2];
int dp(int i,int j,int k,int t) {
    if(i == 1 && j == n) return 0;
    int& ans = d[i][j][k];
    if(vis[i][j][k] == kase) return ans;
    vis[i][j][k] = kase;
    ans = INF;
    int p = (k == 0 ? a[i] : a[j]);
    if(i > 1) {
        int v = abs(p - a[i-1]);
        if(t + v > b[i-1]) return ans = INF; //不可以的结果
        ans = min(ans,dp(i-1,j,0,t+v)+v);
    }
    if(j < n) {
        int v = abs(p - a[j+1]);
        if(t + v > b[j+1]) return ans = INF;
        ans = min(ans,dp(i,j+1,1,t+v)+v);
    }
    return ans;
}
int main() {
    while(~scanf("%d",&n)) {
        ++kase; //小技巧,可以节约初始化的时间
        int v,min_t = INF;
        for(int i=1;i<=n;i++) {
            scanf("%d%d",&a[i],&b[i]);
            if(min_t > b[i]) { min_t = b[i]; v = i; }
        }
        int ans = min(dp(v,v,0,0),dp(v,v,1,0));
        if(ans == INF) printf("No solution\n");
        else printf("%d\n",ans);
    }
    return 0;
}


`spring-cloud-alibaba-dependencies`是一个Maven BOM(Bill of Materials),包含了Spring Cloud Alibaba的所有依赖版本。通过引入`spring-cloud-alibaba-dependencies`,可以简化Spring Cloud Alibaba项目的依赖管理。它提供了以下依赖: - `spring-cloud-alibaba-dependencies`:Spring Cloud Alibaba版本管理器 - `spring-cloud-starter-alibaba-nacos-discovery`:Nacos服务发现 - `spring-cloud-starter-alibaba-nacos-config`:Nacos配置中心 - `spring-cloud-starter-alibaba-sentinel`:Sentinel限流熔断 - `spring-cloud-starter-alibaba-seata`:Seata分布式事务 - `spring-cloud-starter-alibaba-rocketmq`:RocketMQ消息队列 - `spring-cloud-starter-alibaba-dubbo`:Dubbo远程调用 使用`spring-cloud-alibaba-dependencies`需要在`pom.xml`文件中引入如下配置: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` 引入该依赖后,其他Spring Cloud Alibaba组件的依赖版本就可以省略了。例如,使用Nacos作为服务发现和配置中心,只需要引入以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` Spring Cloud Alibaba会自动使用`spring-cloud-alibaba-dependencies`中定义的版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值