问题描述

Shaass拥有n本书。他想为他的所有书制作一个书架,并想让书架的长宽尽量小。第i本书的厚度是t[i],且这本书的纸张宽度是w[i]。书的厚度是1或2,所有书都有同样的高度(即书架的高是均匀的)。

Shaass以以下的方式摆放这些书籍。

1.他选择了一些书并竖直摆放它们。

2.他将剩余的书籍水平纺织于竖直的书上面。 水平放置的书的宽度和不能多于竖直放置的书的总厚度。图中描绘了书籍的样本排列。

帮助Shaass找到可以达到的书架长度最小值。

输入格式

输入的第一行包含一个int型的整数n(1<=n<=100)。 下面的n行分别为v[i]和w[i],对应了书的长度和宽度(即书籍竖直放置与水平放置所占的空间)。 (1<=t[i]<=2,1<=w[i]<=100)

输出格式

一个整数,为可以达到的最小的长度。

样例输入

3

1 10

2 1

2 4

样例输出

3

题解

背包问题的变形,我们可以将一本书长度与厚度的和类比为体积,厚度类比为价值,设所有书全部竖直放置时书架的长度为总体积,我们就可以求出水平放置的书可以提供的最大贡献,再用初始总体积减去这个值就可以得到答案了

#include<bits/stdc++.h>
#define maxn 1050
using namespace std;
inline char get(){
static char buf[3000],*p1=buf,*p2=buf;
return p1==p2 && (p2=(p1=buf)+fread(buf,1,3000,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){
register char c=get();register int f=1,_=0;
while(c>'9' || c<'0')f=(c=='-')?-1:1,c=get();
while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=get();
return _*f;
}
int n,start;
int t[maxn],w[maxn];//t是长 w是宽
//分割线,上面定义转化前的变量,下面定义转化后的变量//
int N,V;
int v[maxn],g[maxn];
int dp[maxn][maxn];//第i本书放在上面或者下面时最大长度
void init(){//转化
N=n;V=start;
for(register int i=1;i<=n;i++)v[i]=w[i]+t[i],g[i]=t[i];
}
int main(){
//freopen("1.txt","r",stdin);
n=read();
for(register int i=1;i<=n;i++)t[i]=read(),w[i]=read(),start+=t[i];
init();
//cout<<N<<" "<<V<<endl;
//for(register int i=1;i<=N;i++)cout<<v[i]<<" "<<g[i]<<endl;
for(register int i=1;i<=N;i++){
for(register int j=0;j<=V;j++){
if(j>=v[i])dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+g[i]);
else dp[i][j]=dp[i-1][j];
//cout<<dp[i][j]<<endl;
//cout<<j<<" "<<v[i]<<" "<<dp[i][j]<<endl;
}
}
cout<<start-dp[N][V];
return 0;
}

[CF294B]Shaass and Bookshelf的更多相关文章

  1. Codeforces Round #178 (Div. 2) B. Shaass and Bookshelf —— DP

    题目链接:http://codeforces.com/contest/294/problem/B B. Shaass and Bookshelf time limit per test 1 secon ...

  2. Codeforces Round #178 (Div. 2) B .Shaass and Bookshelf

    Shaass has n books. He wants to make a bookshelf for all his books. He wants the bookshelf's dimensi ...

  3. Codeforces K. Shaass and Bookshelf(动态规划三元组贪心)

    题目描述: B. Shaass and Bookshetime limit per test    2 secondsmemory limit per test 256 megabytesinput  ...

  4. B. Shaass and Bookshelf DP

    http://codeforces.com/contest/294/problem/B 据说是贪心,我用了一个复杂度是2e8的dp水过去了. 其实这题就是给你n个数,每个数有两个权值,分成两组,使得第 ...

  5. Codeforces 294B Shaass and Bookshelf(记忆化搜索)

    题目 记忆化搜索(深搜+记录状态) 感谢JLGG //记忆话搜索 //一本书2中状态,竖着放或者横着放 //初始先都竖着放,然后从左边往右边扫 #include<stdio.h> #inc ...

  6. Codeforces294B - Shaass and Bookshelf(贪心)

    题目大意 给你N本书,每本书由一个厚度t[i](1或者2),宽度w[i],高度都是一样,把一些书竖着放,然后一些书横着放在同一层,就像下图那样放: 问你把所有的书放好之后竖着的书的总厚度是多少? 题解 ...

  7. CodeForces 294B Shaass and Bookshelf 【规律 & 模拟】或【Dp】

    这道题目的意思就是排两排书,下面这排只能竖着放,上面这排可以平着放,使得宽度最小 根据题意可以得出一个结论,放上这排书的Width 肯定会遵照从小到大的顺序放上去的 Because the total ...

  8. Codeforces 294B Shaass and Bookshelf:dp

    题目链接:http://codeforces.com/problemset/problem/294/B 题意: 有n本书,每本书的厚度为t[i],宽度为w[i] (1<=t[i]<=2, ...

  9. OUC_Summer Training_ DIV2_#13 723afternoon

    A - Shaass and Oskols Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

随机推荐

  1. mysql导出数据很快,导入很慢

    mysql导出快,导入特别慢的解决方法:在导入时添加两个参数:max_allowed_packet; net_buffer_length --max_allowed_packet   客户端/服务器之 ...

  2. iOS11.2-11.3.1进行越狱及问题

    设备环境:Electra.iOS11.13.1 PS:Electra最新版本进行越狱只支持11.14以下的版本.同时这是不完美越狱,每次重启手机都需要重新越狱,最后,由于Electra版本推出仓促,一 ...

  3. JSON.stringify()和JSON.parse()的区别

    JSON.stringify()此方法用于将一个对象解析成字符串并返回. JSON.parse()此方法刚好相反是将一个字符串对象解析成一个JSON对象.

  4. Linux 学习第三天

    一.常用命令 1.diff A.diff -q 源文件 目标文件  (快速比较文件是否相同) 2.ifconfig.nmcli (查看配置信息) 命令输入注意: Windows 查看网卡配置信息输入命 ...

  5. Centos7验证Kickstart文件是否完整方法

    1.1    功能简介 CentOS 7 包含 ksvalidator 命令行程序,可使用该程序进行确认Kickstart文件.这个工具是 pykickstart 软件包的一部分.要安装pykicks ...

  6. XSS攻击 && CSRF攻击 基础理解

    一个网站,不管多么的帅气,多么的风骚,如果你不安全,那始终都是一个弟弟啊~ 今天又看了下XSS和CSRF攻击的文章,我也想发点什么普及下大家的安全意识,毕竟作为一名拥有伟大梦想的程序员,基本的安全意识 ...

  7. python3.X 安装web.py 失败的解决方法

    python2.x 安装python是非常顺利的 但是 在进行 pip3 install web.py 时提示很多错误 例如缺少模块 语法错误...... 最后试了一下web.py 的dev版本 pi ...

  8. HDFS原理

    1 . NameNode 概述 a. NameNode 是 HDFS 的核心. b. NameNode 也称为 Master. c. NameNode 仅存储 HDFS 的元数据:文件系统中所有文件的 ...

  9. Ubuntu Linux TinySerial串口调试助手 可视化界面 安装使用

    ubuntu Linux下串口调试助手使用 Tiny Serial为一个开源项目,欢迎大家使用,基于Qt开发的串口调试助手,有一般串口助手的基本功能,更多功能正在完善. Github地址:https: ...

  10. python学习——初始面向对象

    一.讲在前面 编程的世界中有三大体系,面向过程.面向函数和面向对象编程.而面向过程的编程就包括了面向函数编程,接下来说一下面向对象.假如 ,你现在是一家游戏公司的开发人员,现在需要你开发一款叫做< ...