luogu P1103 书本整理
题目描述
Frank是一个非常喜爱整洁的人。他有一大堆书和一个书架,想要把书放在书架上。书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上。但是Frank发现,由于很多书的宽度不同,所以书看起来还是非常不整齐。于是他决定从中拿掉k本书,使得书架可以看起来整齐一点。
书架的不整齐度是这样定义的:每两本书宽度的差的绝对值的和。例如有4本书:
1x2 5x3 2x4 3x1 那么Frank将其排列整齐后是:
1x2 2x4 3x1 5x3 不整齐度就是2+3+2=7
已知每本书的高度都不一样,请你求出去掉k本书后的最小的不整齐度。
输入输出格式
输入格式:
第一行两个数字n和k,代表书有几本,从中去掉几本。(1<=n<=100, 1<=k<n)
下面的n行,每行两个数字表示一本书的高度和宽度,均小于200。
保证高度不重复
输出格式:
一行一个整数,表示书架的最小不整齐度。
输入样例#1:
4 1
1 2
2 4
3 1
5 3
输出样例#1
3
把问题转化成选取n-k本书所得的最小值
f[i][k]表示前i本书,选取k本书的最小值
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
int n,k;
inline int read() {
	int x=0,f=1;
	char c=getchar();
	while(c<'0' || c>'9')
	{
		if(c == '-') f=-1;
		c=getchar() ;
	}
	while(c<='9'&&c>='0')
		x=x*10+c-'0',c=getchar();
	return x*f;
}
const int maxn = 186;
struct node {
	int h,w;
	bool operator < (const node & a) const {
		return h<a.h;
	}
}book[maxn];
int dp[maxn][maxn];
int main() {
	n=read(),k=read();
	int rems=n-k;
	for(int i=1;i<=n;++i) {
		book[i].h=read();
		book[i].w=read();
	}
	std::sort(book+1,book+n+1);
	std::memset(dp,0x3f,sizeof dp);
	for(int i=1;i<=n;++i)dp[i][1]=0;
	for(int k=1;k <= rems;++k)
	{
		for(int i=1;i <= n;++i)
		{
			for(int j=1;j<i;++j)
			{
				dp[i][k]=std::min(dp[i][k],dp[j][k-1]+abs(book[i].w-book[j].w));
			}
		}
	}
	int ans=0x7fffffff;;
	for(int i=1;i<=n;++i) {
		ans=std::min(ans,dp[i][rems]);
	}
	printf("%d\n",ans);
}
luogu P1103 书本整理的更多相关文章
- 洛谷 P1103 书本整理(动规)
		洛谷 P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发 ... 
- P1103 书本整理
		P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由 ... 
- Java实现 洛谷 P1103 书本整理
		题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所 ... 
- 洛谷——P1103 书本整理
		https://www.luogu.org/problem/show?pid=1103 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所 ... 
- dp P1103 书本整理 洛谷
		题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所 ... 
- 洛谷P1103 书本整理
		题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的 书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同, ... 
- 20180610模拟赛T3——书本整理
		[问题描述] 小明的书架上放了许多书,为了使书架变得整洁,小明决定整理书架,他将所有书按高度大小排列,这样排了之后虽然整齐了许多,但小明发现,书本的宽度不同,导致书架看上去还是有些凌乱.小明把这个凌乱 ... 
- [luoguP1103] 书本整理(DP)
		传送门 以 去掉多少个 为阶段不好做. 去掉 k 个也可以变成选 n - k 个 f[i][j] 表示前 i 个数中 选 j 个的最优解,a[i] 必选 f[i][j] = min(f[i][j], ... 
- 动态规划dp专题练习
		貌似开坑还挺好玩的...开一个来玩玩=v=... 正好自己dp不是很熟悉,就开个坑来练练吧...先练个50题?小目标... 好像有点多啊QAQ 既然是开坑,之前写的都不要了! 50/50 1.洛谷P3 ... 
随机推荐
- numpy 三个点的使用[...]
			numpy [...]语法简单使用 Python numpy中切片功能与列表切片类似,但功能更加强大 本文主讲numpy中[...]的简单使用,后续工作继续补充. import numpy >& ... 
- ASCII码表含义
			在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a.b.c.d这样的52个字母(包括大写)以及0.1等数字还有一些常用的符号(例如*.#. ... 
- Tourists Gym - 101002I LCA——dfs+RMQ在线算法
			LCA(Least Common Ancestors),即最近公共祖先,是指这样一个问题:在有根树中,找出某两个结点u和v最近的公共祖先(另一种说法,离树根最远的公共祖先). 知识需求:1)RMQ的S ... 
- Fiddler证书安装不成功
			Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功 原文链接 在使用Fiddler抓包时,我 ... 
- golang导出excel(excel格式)
			之前写过一篇导出cvs格式的,如果只是简单导出完全能满足需要.按时如果想要有复杂需求,如样式定制.多个sheet之类的,就无法完成了.之后发现有人已经实现golang直接excel对excel的操作, ... 
- [转] 重定向 CORS 跨域请求
			非简单请求不可重定向,包括第一个preflight请求和第二个真正的请求都不行. 简单请求可以重定向任意多次,但如需兼容多数浏览器,只可进行一次重定向. 中间服务器应当同样配置相关 CORS 响应头. ... 
- Selenium WebDriver- 隐式等待
			隐式等待是只要有一个元素在设置的时间内没有找到,就会报超时 隐式等待是一个全局的设置,只要放在找东西语句的前面,它后面的找东西的语句都会默认等待设置的时间(这里是10秒),这是死等,除非立刻找到了,5 ... 
- day01_05.数学运算符
			数学运算符 $zhang = 100; $lisi = 50; echo $zhang+$lisi; 答案:150 $zhang = 50; $lisi = 40; echo $zhang - $li ... 
- 九度oj 题目1184:二叉树遍历
			题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空 ... 
- js 抓取页面数据
			数据抓取 主要思路和原理 在根节点document中监听所有需要抓取的事件 在元素事件传递中,捕获阶段获取事件信息,进行埋点 通过getBoundingClientRect() 方法可获取元素的大小和 ... 
