博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU3757
阅读量:5046 次
发布时间:2019-06-12

本文共 1181 字,大约阅读时间需要 3 分钟。

题意:一些团队因为任务要去避难所,并且每个避难所必须要有团队在,避难所的数量小于等于团队的数量,

团队去避难所的消耗油量与路程成正比,求解最小耗油量。题目来源:2010 Northeastern European Regional Contest

输入:
T(示例)
n(团队个数)
a,b,c...(团队坐标,无序排列)
m(避难所个数)
a1,b1,c1...(避难所坐标,无序排列)
输出:
sum(总耗油量)
x,y,z...(团队按升序排序所到避难所序号值,注意不是坐标值)
思路:

一道超级考验理解英语智商的题目,反正光读懂题目意思,花了半个多小时,然后理解测试数据又花了半个多小时,题目整体看上去应该是用贪心+DP,先把给出的团队,避难所坐标排好序,然后找关于团队的状态转移方程,我解释下怎么理解这个状态转移方程,因为排好序后,随机选取一个下标为i的团队以及下标为j的避难所,那么要求i个团队到j个避难所所花费的总耗油量DP[i][j],第i个团队根据最优原则,必然是去第j个避难所,那么前i-1个团队就有两种可能了,一种是去j-1个避难所,那么DP[i][j]=DP[i-1][j-1]+L[i][j],第二种就是去j个避难所,因为这也是一种情况,那么此时DP[i][j]=DP[i-1][j]+L[i][j],所以在这两种情况里面选出最优解即可,因为题目限制了内存,所以用滚动数组记录,最后打印团队到避难所相应下标需要按升序排列,注意下即可,关于滚动数组,其实只是一定程度减少了前面空间的浪费,与时间无关,也就是覆盖了之前的记录,类似于斐波那契数列的优化,我的理解是这样的,这里贴 一位大牛的blog讲解 ,另外这道题的代码参考  毕竟太弱,写不出来

#include
#include
#include
#include
using namespace std;const long long Max=(1LL)<<60;short path[4010][4010];long long f[4010];struct N{ long long dist; int index; int Find;} team[4010],shelter[4010];int n,m;bool cmp(N a,N b){ return a.dist
=1; j--) { if(f[j]

转载于:https://www.cnblogs.com/yefengCrazy/p/5636716.html

你可能感兴趣的文章
如何删除NSDictionary或NSArray中的NSNull
查看>>
ueditor 结合easyui使用
查看>>
thymeleaf学习笔记
查看>>
进程(第一部分)
查看>>
springMVC总结
查看>>
Linux 命令速记本
查看>>
python中import xx 的含义
查看>>
关于JS的Date对象的探究
查看>>
Typora的使用
查看>>
百度竞价
查看>>
JQ 操作样式,单选按钮跟复选框
查看>>
python中的自测语句是什么?
查看>>
JQuery 基础:
查看>>
Proj.4坐标系统创建参数
查看>>
我有一个 APP 创意,如何将其实现?
查看>>
SVN改地址eclipse怎么同步
查看>>
Xadmin查询
查看>>
Jsf 页面导航Navigation总结
查看>>
android studio 2018.4.16 intent
查看>>
html4与html5的区别
查看>>