洛谷 [P1282] 多米诺骨牌
这道题是一道背包问题,考虑一个背包,
显然如果我们直接设dp[i]表示前i个使差值最小所需的最少翻转次数,是具有后效性的。
所以我们将直接求最值,改为求某个值是否可行,这种求最值转变为求可行性的思想是非常实用的。
状态 dp[i][j]表示使用前i个物品修改得到差值j的最小步数。
第一步求出原来两个数组的总和的差值Delta(DD)是多少。
第二步进行背包DP,每个物品的质量为:t=a[i]-b[i],枚举改或不改,这样做相当于是我们企图去弥补两个数组和的差异Delta。
第三步就是找到一个能够构造出来的最小的Delta就行啦。,对负数的处理可以直接加上一个很大的N。
初始化dp[0][DD]=0,其余全为INF
转移方程 dp[i][j]=min(dp[i][j],dp[i-1][j]);
dp[i][j]=min(dp[i][j],dp[i-1][j-2*t]+1);
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
using namespace std;
const int MAXN=1005,MAXM=MAXN*5;
int init(){
int rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return rv*fh;
}
int dp[MAXN][(MAXM<<1)+MAXN];
int main(){
freopen("in.txt","r",stdin);
int n=init();
memset(dp,0x3f,sizeof(dp));
dp[0][MAXM]=0;
for(int i=1;i<=n;i++){
int a=init(),b=init();
int t=a-b;
for(int j=-MAXM;j<=MAXM;j++){
dp[i][j+MAXM]=min(dp[i][j+MAXM],dp[i-1][j-t+MAXM]);
dp[i][j+MAXM]=min(dp[i][j+MAXM],dp[i-1][j+t+MAXM]+1);
}
}
for(int i=0;i<=MAXM;i++){
if(dp[n][MAXM-i]<=2005){
printf("%d\n",min(dp[n][MAXM-i],dp[n][MAXM+i]));
return 0;
}
if(dp[n][MAXM+i]<=2005){
printf("%d\n",min(dp[n][MAXM-i],dp[n][MAXM+i]));
return 0;
}
}
fclose(stdin);
return 0;
}
洛谷 [P1282] 多米诺骨牌的更多相关文章
- 洛谷P1282 多米诺骨牌 (DP)
洛谷P1282 多米诺骨牌 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中 ...
- poj 1717==洛谷P1282 多米诺骨牌
Dominoes Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6571 Accepted: 2178 Descript ...
- 洛谷P1282 多米诺骨牌
P1282 多米诺骨牌 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S ...
- 【01背包】洛谷P1282多米诺骨牌
题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...
- 洛谷 P1282 多米诺骨牌 ( 线性DP )
题意 : 题目链接 分析 : 一开始这个想法也有想到,但是貌似要开很大数组,就感觉应该不行 遂放弃想其他方法,万万没想到注意到可以滚动优化(其实不优化也可以过) 定义 dp[i][j] 表示 到第 ...
- 洛谷 P1282 多米诺骨牌("01"背包)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://blog.csdn.net/Darost/artic ...
- 洛谷P1282 多米诺骨牌【线性dp】
题目:https://www.luogu.org/problemnew/show/P1282 题意: 给定n个牌,每个牌有一个上点数和下点数.可以通过旋转改变交换上下点数. 问使得上点数之和和下点数之 ...
- yzoj P2043 & 洛谷 P1282 多米诺骨牌 题解
题意 类似于就是背包. 解析 代码 跟解析有点不一样v[i]价值,w[i]重量,s背包容积,背包转移即可. #include<bits/stdc++.h> using namespace ...
- P1282 多米诺骨牌【dp】
P1282 多米诺骨牌 提交 20.02k 通过 6.30k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 查看算 ...
随机推荐
- UEP-下拉
uep建立下拉 静态下拉: ①private Map<String,String> beanMap = new HashMap<String,String>(); //gett ...
- [国嵌攻略][092][UDP网络程序设计]
server.c #include <sys/socket.h> #include <netinet/in.h> #include <strings.h> #inc ...
- 【学习笔记】Java finalize()的使用
<Java编程思想>中有提到,Java的垃圾回收器并不是那么靠谱,垃圾回收会占用很大的资源开销,垃圾回收器很懒,当变量和对象不再被引用.脱离作用域的时候,垃圾回收器会不定时的进行垃圾回收, ...
- js动态生成二维码
一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src= ...
- java访问修饰符 public protect default private
适用范围<访问权限范围越小,安全性越高> 访问权限 类 包 子类 其他包 public ok ok ok ok (对所有可用的 ...
- web组件开发入门
本文是学习慕课网阿当大话西游之WEB组件后的一个总结. 组件的分类 1 框架组件:依赖于某种框架的组件 2 定制组件:根据公司业务定制的组件 3 独立组件:不依赖框架的组件 定义和加载组件 解决css ...
- Java数据持久层框架 MyBatis之背景知识二
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- This is probably because there is no OLE editor registered against the type of file you were trying to open.
Reason: This is probably because there is no OLE editor registered against the type of file you were ...
- 监控服务器ssh登录,并发送报警邮件
最近想监控下云主机的ssh登录情况,所以开始写ssh登录报警监控.实现方式并不难. 一:邮箱申请开启SMTP 在邮箱中选择“设置”----->“账户” 在如下图处开启POP3/SMTP服务,并生 ...
- c# gdi设置画刷透明
使用solidBrush新建画刷,定义画刷的颜色为透明色 Brush b = new SolidBrush(Color.FromArgb(50, Color.Green)); 这里的50是透明度的设置 ...