NOJ——1656搬砖(DP)
[1656] 搬砖
- 时间限制: 2000 ms 内存限制: 65535 K
- 问题描述
- 开学了,万恶的大二学长们又要领着大一的鲜肉们一起敲代码搬砖了,这不,著名的杨神拿着n块砖头,当然他把这n块砖头的重量都告诉你了,让你搬走其中的2*k块,其中每次你只能拿2块,消耗的体力是这两块砖头重量之差的平方,比如一块砖重量为5,另一块是11,那么搬走这两块砖头消耗体力为(11- 5)^2 = 36,机智如你,你能算出如何搬2*k块,才能使你花费的体力最小呢?
- 输入
- 一个整数t,代表数据组数(t <= 10)
每组数据包含2个整数n和k,保证0 <= 2*k <= n <= 2000
接下来一行包含n个整数(每个数都<= 100000) - 输出
- 每组一个整数,代表最小的体力消耗
- 样例输入
2
2 1
1 3
6 2
1 4 2 6 11 9- 样例输出
4
5- 提示
第二组样例,可以这么搬(1 2) (4 6)组合,或者(1 2) (9 11)组合,这样花费代价是最少的
这题在我看了很久的大神的题解+想了又想之后稍微理解了点,写了下代码......还好过了
让我这个初学者菜鸟神烦的一题...
主要思想:由于平方差最小,那么你sort之后一定是取相邻的一对数字,但是向左或向右就不得而知了,因此要用二位数组记录当前循环到第i件时取了j对所消耗的体力。
两层for是因为每一次可选i件都会对当前的最优解造成影响,但是可以记录在那一次的dp[i]中,因此最后那个dp[n][k]就是可选n件时取k对的最优解
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<set>
#include<map>
#include<sstream>
#include<algorithm>
#include<cmath>
using namespace std;
int zhuan[2010];
int dp[2010][2010];//
int main (void)
{
int t,n,k,i,j,ans;
cin>>t;
while (t--)
{
cin>>n>>k;
memset(zhuan,0,sizeof(zhuan));
memset(dp,0x3f3f3f3f,sizeof(dp));
for (int i=0; i<n; i++)
{
cin>>zhuan[i];
dp[i][0]=0;
}
sort(zhuan,zhuan+n);
for (int i=1; i<=n; i++)//当前循环到的第I件(不一定选)
{
for (int j=1; 2*j<=i&&j<=k; j++)//(当成功入选j件时)
{
dp[i][j]=min(dp[i-2][j-1]+(zhuan[i-2]-zhuan[i-1])*(zhuan[i-2]-zhuan[i-1]) , dp[i-1][j]);//最优决策=min(上一次状态+取i-1与i-2这两件/不取,保持上一件状态)
}
}
cout<<dp[n][k]<<endl;
}
return 0;
}
NOJ——1656搬砖(DP)的更多相关文章
- 如何使用银联卡充值美元到BTC-E以及比特币搬砖教程
1,名词解释 搬砖:就是在价格低的平台买入比特币,然后转移到价格高的平台卖出, 一般而言,BTC-E是国外三大比特币交易所中比特币单价最低的一个站,因为其需要用美元充值,相对不方便.之前国内比特币价格 ...
- 网络搬砖是件苦力活 CMS推荐GHOS博客程序
搬砖不是技术活,而是苦力(bi)活,富有技术含量的苦力活说不定就是一门可以持续的生意. 我们不生产内容,我们只是互联网的内容搬运工,这是大部分不具备原创能力个人站长的心声.虽然原创能力不够,但是服务目 ...
- 【NOI2019模拟】搬砖
[NOI2019模拟]搬砖 Description 小火车很穷,只好去搬砖了. 小火车被工头要求搭建\(n\)座塔,第i个高度为\(H_i\),也就是由\(H_i\)块砖头组成.每次小火车可以携带至多 ...
- Software-Defined Networking之搬砖的故事
在很久很久以前,有一个村子. 村里的每一户,都有一个男人和一个女人. 每一户,都以搬砖为生. 从不同的地方,搬到不同的地方. 男人负责搬砖,女人负责告诉男人往哪搬. 每个家庭,都服从村委会的指挥. 村 ...
- PS官方正式中文版(搬砖分享)
https://pan.baidu.com/s/1c3IdQq0 PS官方正式中文版(搬砖分享) 注意事项: 1.安装开始前请先断网,在成功破解激活前请全程断网: 2.安装完成后先试运行软件一次,然后 ...
- 中国用户通过rchange用银联充值到PerfectMoney再给BTC-E充值进行搬砖的方法
最近迷上了比特币这个疯狂的东西,相信很多技术人员都感兴趣. 比特币.莱特币钱包下载和把数据迁移到C盘以外其他盘的方法. 莱特币和山寨币的原理跟比特币基本上一样,可以参考这个方法进行,莱特币的钱包数据迁 ...
- 比特币搬砖对冲策略Python源码
策略复制地址:https://www.fmz.com/strategy/21023 策略原理 比特币搬砖策略是入门程序化交易的基础策略.原理简单,是新手尝试程序化的好选择,在其黄金时期,比特币搬砖也带 ...
- 搬砖--杭电校赛(dfs)
搬砖 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submissi ...
- Android老司机搬砖小技巧
作为一名Android世界的搬运工,每天搬砖已经够苦够累了,走在坑坑洼洼的道路一不小心就掉坑里了. SDK常用工具类 Android SDK中本身就拥有很多轮子,熟悉这些轮子,可以提高我们的搬砖效率. ...
随机推荐
- 用requests爬取图片
# coding=utf-8 from bs4 import BeautifulSoup import requests import urllib x = 1 def crawl(url): res ...
- javaweb基础(3)_tomcat下部署项目
一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:
- js函数节流和函数防抖
概念解释 函数节流: 频繁触发,但只在特定的时间内才执行一次代码 函数防抖: 频繁触发,但只在特定的时间内没有触发执行条件才执行一次代码 函数节流 函数节流应用的实际场景,多数在监听页面元素滚动事件的 ...
- 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar
t老师的做法好神…… 题目描述 桌面上有 n 个水果,分别是苹果和橘子.Bytea需要从水果中选择连续的一个区间,并从左到右或从右到左拿水果,且过程中橘子的数量必须始终不小于苹果的数量.求最长的区间大 ...
- $GLOBALS['HTTP_RAW_POST_DATA']与$_POST的区别
$HTTP_RAW_POST_DATA The RAW / uninterpreted HTTP POst information can be accessed with: $GLOBALS ...
- Unity基础-发布
PC BuildSetting File->BuildSetting Switch Platform Development Build是在调试模式下使用版本 Script Debugging调 ...
- 【linux】【CPU】【x86】平台说明
节选自 <鸟哥的linux私房菜> http://cn.linux.vbird.org/linux_basic/0520rpm_and_srpm_1.php 操作硬件平台:这是个很好玩的地 ...
- ProC第三弹
一.前言 我们上面已经了解Windows和Linux下的ProC开发环境,这里我们更进一步去简要介绍下ProC的预编译参数. 二.什么是预编译 预编译过程中,Pro*C/C++会自动生成C或者C++的 ...
- $(MAKE) , make命令
make 定义了很多默认变量,像常用的命令或者是命令选项之类的,什么CC啊,CFLAGS啊之类.$(MAKE)就是预设的 make 这个命令的名称(或者路径).make -p 可以查看所有预定义的变量 ...
- CodeForce--Benches
A. Benches There are nn benches in the Berland Central park. It is known that aiai people are curr ...