hdu 2059 龟兔赛跑 (dp)

小记:自己想的转移方程 太复杂了,参考了一下别人的一个转移方程。


思路:Ti[i] 为到第i个充电站的最少花费时间

t[i][j] 为在第i个充电站充满电后,到达第j个充电站所需的时间

则状态转移方程为:

Ti[i] = min(T[j] + t[j][i] + T | j ∈[1,i-1] )   (i∈[1, N])

特别的:

我们将起点和终点也设置为加油站。

那么在起点的加油站 就不需要加T了,T即是充电所需时间


这里因为时间是根据距离和速度 计算出来的,为了避免精度误差,我对距离t[i][j]的计算使用了乘以vt1*vt2两个值相乘的结果, 

那么最后的结果只要除以vt1*vt2即可以和兔子的时间比较得出结果。这里注意+T的话也要让T乘以vt1*vt2


code:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>

using namespace std;

#define mst(a,b) memset(a,b,sizeof(a))
#define REP(a,b,c) for(int a = b; a < c; ++a)
#define eps 10e-8

const int MAX_ = 10010;
const int N = 100010;
const int INF = 0x7fffffff;

int p[MAX_];
int dp[MAX_][2];
long long t[MAX_][2];
long long Ti[MAX_];

long long cal(int dis, int C, int vt1, int vt2){
    if(dis > C){
        return (dis - C)*vt1 + C*vt2;
    }
    else {
        return dis*vt2;
    }
}

int main(){
	int L, N, vr, vt1, vt2, C, T;
	while(~scanf("%d", &L)){
        scanf("%d%d%d", &N, &C, &T);
        scanf("%d%d%d", &vr, &vt1, &vt2);
        REP(i, 1, N+1){
            scanf("%d", &p[i]);
        }
        p[0] = 0;
        p[N+1] = L;

        Ti[0] = 0;
        //printf("Ti:\n");
        REP(i, 1, N+2){
            long long minm = cal(p[i] - p[0], C, vt1, vt2);
            REP(j, 1, i){
                long long tmp = Ti[j] + T * vt1 * vt2 + cal(p[i]-p[j], C, vt1, vt2);
                minm = min(minm, tmp);
            }
            Ti[i] = minm;
            //printf("%I64d ", Ti[i]);
        }
        //printf("\n");

        double tmp = L*1.0/vr, tt = Ti[N+1]*1.0/(vt1*vt2);
        //printf("%f %f\n", tmp, tt);
        if(tmp > tt){
            printf("What a pity rabbit!\n");
        }
        else printf("Good job,rabbit!\n");
	}
	return 0;
}


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值