搬东西 dp
现有n个扁担以及一辆货车,扁担一次挑两个货物,货车可以装K个货物,货车只能运送一次货物。
现在qwb要把总共2n+k个货物搬到某个地方。现在qwb想选K个货物让货车先运走,然后剩下的2n个货物由他自己用扁担云过去,但是两个货物重量不均匀的话,会使得qwb感到很难受,每次会造成
的疲劳值,wi和wj是每次选的两个货物的重量,qwb想要n次运送后,使得
疲劳值的和最小。
第一行两个整数 n和k (2 ≤ n ≤ 100,000),(1≤ k≤ 20).
第二行2n+k个, w1, w2, ..., w2n+k, wi是每个货物的重量 (1 ≤ wi ≤ 1,000,000,000).
输出一行,疲劳值的最小值。
input
3 2
1 3 4 6 3 4 100 200
output
5
这个题目是一个dp,开始没有意识到,通过这个题,我感觉我太依赖别人了,这样不太好。
dp[i][j] 表示前面 i 个物品,选出来 j 个 的最小疲劳值。
如果已经选出来 2*n 个物品,怎么算疲劳值最小,就应该是 排序,相邻的放在一起就是疲劳值最小的。
如果 i-j 是奇数,就是说那就是- 如果是偶数就是+
所以可以得到转移方程 dp[i][j]=min(dp[i-1][j]+(j-i)%2==1?-a[i]:+a[i],dp[i-1][j-1])
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <queue>
#include <string>
#include <vector>
#include <map>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn = 3e5 + ;
typedef long long ll;
ll dp[maxn][];
ll w[maxn]; int main()
{
int n, k;
scanf("%d%d", &n, &k);
for (int i = ; i <= *n+k; i++) scanf("%lld", &w[i]);
sort(w + , w + + *n+k);
for(int i=;i<=*n+k;i++)
{
for(int j=;j<=k;j++)
{
if (j == ) dp[i][j] = dp[i - ][j] + (i % == ? -w[i] : w[i]);
else dp[i][j] = min(dp[i - ][j] + ((i - j) % == ? -w[i] : w[i]), dp[i - ][j - ]);
}
}
printf("%lld\n", dp[*n+k][k]);
return ;
}
搬东西 dp的更多相关文章
- hdu---(1421)搬寝室(dp)
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 拿搬东西来解释udp tcpip bio nio aio aio异步
[群主]雷欧纳德简单理解 tcpip是有通信确认的面对面通信 有打招呼的过程 有建立通道的过程 有保持通道的确认 有具体传输udp是看到对面的人好像在对面等你 就往对面扔东西[群主]雷欧 ...
- hdu-1421搬寝室(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=1421; 思路:先将所给的椅子的价值按升序排列,举个例子,四张椅子的价值分别为a,b,c,d(a<b< ...
- hdu1421 搬寝室 DP
转载: /*证明:从4个数中 a b c d 依次递增: 选取相邻的两个数一定是最小得 及:(a-b)^2+(c-d)^2<(a-c)^2+(b-d)^2&&(a-b)^2+( ...
- 搬寝室(HDU 1421 DP)
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu 1421 搬寝室(dp)
Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...
- DP HDIJ1421 搬宿舍
Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...
- 搬寝室(经典dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1421 hdu_1421:搬寝室 Time Limit: 2000/1000 MS (Java/Othe ...
- HDU-1421 搬寝室【dp】
题目链接:https://vjudge.net/contest/214662#problem/E 题目大意: ...
随机推荐
- tf.get_variable
使用tf.get_variable()时,如果检测到命名冲突,系统不会处理冲突,而会报错. 如果已经创建的变量对象,就把那个对象返回,如果没有创建变量对象的话,就创建一个新的. tf.get_vari ...
- 线程池:Execution框架
每问题每线程:在于它没有对已创建线程的数量进行任何限制,除非对客户端能够抛出的请求速率进行限制. 下边 有些图片看不到,清看原地址:http://www.360doc.com/content/10/1 ...
- 【Java】封装、继承、多态
封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代 ...
- 官方解读:Salesforce线上考试新政与福利
随着疫情在世界范围内的迅速蔓延,Salesforce推出了一系列的线上认证考试改进方案,方便Salesforce从业者在疫情阶段也能够安全.便利地参与考试,今天让我们一起来捋一捋那些,和我们密切相关的 ...
- C - Sweets Eating
规律题 前缀和+规律 先求前缀和...答案为c[i]=arr[i]+c[i-m]//i>m时. #include<bits/stdc++.h> using namespace std ...
- 浏览器中 JS 的事件循环机制
目录 事件循环机制 宏任务与微任务 实例分析 参考 1.事件循环机制 浏览器执行JS代码大致可以分为三个步骤,而这三个步骤的往复构成了JS的事件循环机制(如图). 第一步:主线程(JS引擎线程)中执行 ...
- xhprof windows下安装和使用(转载)
1.使用5.3.3以上的php版本,或者直接下载wamp2.1集成环境. 2.下载xhprof for windows版本,地址:http://www.benjamin-carl.de/?downlo ...
- JQ获取select上的option的data-start和data-id
来源:https://zhidao.baidu.com/question/692142321436883524.html 静态的写法: 用jq的attr()函数,如: HTML: <select ...
- sql语句-------重复时插入更新
ON DUPLICATE KEY UPDATE重复时插入更新 insert into user(id,username) value('231',"二人") on duplicat ...
- Android 5.0系统默认颜色
伴随着 Android5.0 的发布也更新了support-v7-appcompat 到 V21,其中增加了 ToolBar.recyclerview.cardview 等控件. Android5.0 ...