LA 4987 背包
题意:
有n个施工队,给定他们的位置,有m个防空洞,给定位置,求将施工队放到m个防空洞里面,最少的总距离?
n<=4000
分析:
dp[i][j] 前 i 个施工队,放到前 j 个防空洞里面的最少距离;
dp(i+1,j) = min(dp(i,j),dp(i,j-1)) + dist(a[i] - b[j]);
DP采用滚动数组;
那么,第二维的防空洞该怎么循环呢?
因为,每个防空洞都要有,那么这类似于背包中的容量,刷表的方式;
#include <bits/stdc++.h> using namespace std; const int maxn = +;
const int inf = 0x3f3f3f3f; struct node {
int d;
int id;
int ans;
}A[maxn],B[maxn]; long long dp[maxn];
int path[maxn][maxn];
int n,m; bool cmp(node a,node b) {
if(a.d==b.d)
return a.id < b.id;
return a.d < b.d;
} void find_path(int i,int j) {
if(i)
find_path(i-,path[i][j]);
A[i].ans = B[j].id;
} int cmp1(node a,node b) {
return a.id < b.id;
} int main()
{
while(~scanf("%d",&n)) {
for(int i=;i<n;i++)
{
scanf("%d",&A[i].d);
A[i].id = i;
} scanf("%d",&m);
for(int i=;i<m;i++) {
scanf("%d",&B[i].d);
B[i].id = i;
} sort(A,A+n,cmp);
sort(B,B+m,cmp); memset(dp,inf,sizeof(dp));
dp[] = abs(A[].d-B[].d); for(int i=;i<n;i++) {
for(int j=min(m-,i);j>=;j--) {
if(!j||dp[j]<dp[j-]) {
path[i][j] = j;
dp[j] = dp[j] + abs(A[i].d-B[j].d);
}
else {
path[i][j] = j-;
dp[j] = dp[j-] + abs(A[i].d - B[j].d);
}
}
} printf("%lld\n",dp[m-]);
find_path(n-,m-);
sort(A,A+n,cmp1); for(int i=;i<n;i++)
printf("%d ",A[i].ans+);
puts(""); }
return ;
}
LA 4987 背包的更多相关文章
- LA 4015 树形背包
题目链接:https://vjudge.net/contest/164840#problem/D 题意: 给一棵树,每条边上有一些权值,求 长度不超过 x ,最多能走多少个点: 分析: 考虑每一个节点 ...
- hdu 5188(带限制的01背包)
zhx and contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- hdu 5188 zhx and contest [ 排序 + 背包 ]
传送门 zhx and contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU 5188 zhx and contest(带限制条件的 01背包)
Problem Description As one of the most powerful brushes in the world, zhx usually takes part in all ...
- BZOJ 4987 (树形DP)
###题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4987 ###分析 先考虑贪心,显然k个节点形成一棵树 求出树的直径,显然直径应该只被经 ...
- bzoj4987 Tree 树上背包
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4987 题解 一道还不错的题咯. 很容易发现一个结论:这 \(k\) 个点构成的一定是一个连通块 ...
- HDU 5234 背包。
J - 10 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- 2249: Altruistic Amphibians 01背包
Description A set of frogs have accidentally fallen to the bottom of a large pit. Their only means o ...
- 【USACO 3.1】Stamps (完全背包)
题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...
随机推荐
- Java非递归实现迷宫问题
这个题目是本人的一次课程设计,也是我第一次独立做完的一个小玩意,说实话,昨晚的那一刻很有成就感.整个人开心到在自习室蹦起来.因为之前一直是自学的Java,从没有自己做过任何一个项目,这一个课程设计就花 ...
- rem.js的用法及在浏览器端的适配
首先介绍下自己,我是从后端转前端,对于前端的见识还不深望各位全当一个新手自述....... 随着移动设配的更新换代,市场上涌现了大量的非主流设备分辨率,比如华为手机...... 更新换代快的大前提下自 ...
- 【Linux】Linux下使用Docker快速部署Oracle数据库
安装最新Docker wget -qO- https://get.docker.com/ | sh` 安装 docker-compose sudo curl -L https://github.com ...
- Js内存泄漏的几种情况
想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...
- CF 303C——Minimum Modular——————【剪枝】
Minimum Modular time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- nyoj 104——最大和——————【子矩阵最大和】
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个 ...
- MVC设置默认页面
方法1:在RouteConfig.cs文件中配置默认路由 public class RouteConfig { public static void RegisterRoutes(RouteColle ...
- jquery/js不支持ie9以下版本的方法或属性
1.jquery的trim()去除字符串两边的空格,在ie5~8中不支持此方法.若想替换字符串所有的空格看使用replace()正则替换: var date=" 2014-1 0- 15 ...
- c#winform循环播放多个视频
环境: vs2015 +winform 首先,vs自带组件很方便,所以,用windowMediaplayer组件,如果做单曲循环播放的话,加个属性: axWindowsMediaPlayer1.set ...
- Spring课程 Spring入门篇 5-2 配置切面aspect
本节主要讲了在xml中配置切面的demo 1 解析 1.1 配置切面xml 1.2 配置切面xml 1.3 问:什么是动态代理? 2 代码演练 2.1 配置切面xml 1 解析 1.1 配置切面xml ...