[Luogu1282]多米诺骨牌(DP)
#\(\color{red}{\mathcal{Description}}\)
我们有一堆多米诺骨牌,上下两个部分都有点数,\(But\)我们有一个操作是可以对调上下的点数。若记一块骨牌\(i\)的上点数为\({S_{i,1}}\),下点数为\({S_{i,2}}\)求在达到$$\sum_{i=1}^{n}{|S_{i,1}-S_{i,12}|}$$最小时的最小操作次数。
#\(\color{red}{\mathcal{Solution}}\)
这个题在我看到其前面一半时,甚至已经把状态】给想好了:
嗯,这个题接下来的题面一定是这样的:一共最多\(m\)次操作的机会,可以用或不用,求这个多米诺骨牌序列最大\小的\(bulabulabula....\)
那么我们不妨令\(dp_{i,j,0/1}\)表示前\(i\)个骨牌,一共操作了\(j\)次,当前不操作/操作的\(bulabulabula....\)
嗯,生活就是这样充满机遇与挑战
那么记下来我们来看看这道题可以咋做,因为要求的是操作次数,所以我们不应该把操作次数计入状态,那么与操作次数有关系的是差值,看一下数据,差值最大是\(5 \times 1000\)……好像完全可以接受的样子,那么我们不妨令\(dp_{i,j}\)表示前\(i\)个多米诺骨牌,差值为\(j\)的最小步数。转移就是$$dp_{i,j} = min{dp_{i-1,j+S1-S2}, dp_{i-1,j-S1+S2}+1 }$$或者$$dp_{i,j} = min{dp_{i-1,j+S1-S2}+1, dp_{i-1,j-S1+S2} }$$
哦,滚动数组大法好\(qwq\)
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std ;
const int MAXN = 1010, NN = 5050 ; int out ;
int i, j, k, N, A[MAXN], B[MAXN], dp[2][NN << 2] ;
int main(){
cin >> N ; memset(dp, 0x7f, sizeof(dp)) ; dp[0][NN] = 0 ;
for(i = 1; i <= N; i ++) scanf("%d%d", &A[i], &B[i]) ;
for(k = i = 1; i <= N; i ++, k ^= 1){
memset(dp[k], 0x7f, sizeof(dp[k])) ;
for(j = -5000; j <= 5000; j ++)
dp[k][j + NN] = min(dp[k ^ 1][j + A[i] - B[i] + NN], dp[k ^ 1][j - A[i] + B[i] + NN] + 1) ; ;
}
for(i = 0; i <= 5000; i ++){
out = min(dp[N & 1][i + NN], dp[N & 1][-i + NN]) ;
if(out <= 1000) { cout << out ; break ;}
} return 0 ;
}
[Luogu1282]多米诺骨牌(DP)的更多相关文章
- 洛谷P1282 多米诺骨牌 (DP)
洛谷P1282 多米诺骨牌 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中 ...
- P1282 多米诺骨牌 dp
思路:dp[i][j] 的j是上半段的和的值 这里表示的是达到上半段值是j的最小次数 答案在最小的可达到的j #include<bits/stdc++.h> using namespa ...
- Luogu P1282 多米诺骨牌 DP。。背包?
背包...差不多..QWQ 设f[i]为达到差值为i的状态需要多少次,那就很显然了: 注意区分正负不同的代价的循环方向 技巧:如果不想改负数的话,那可以移动一下数组下标,用一个新的指针指向原来的数组 ...
- 多米诺骨牌放置问题(状压DP)
例题: 最近小A遇到了一个很有趣的问题: 现在有一个\(n\times m\)规格的桌面,我们希望用\(1 \times 2\)规格的多米诺骨牌将其覆盖. 例如,对于一个\(10 \times 11\ ...
- P1282 多米诺骨牌 (差值DP+背包)
题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...
- P1282 多米诺骨牌【dp】
P1282 多米诺骨牌 提交 20.02k 通过 6.30k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 查看算 ...
- 省选训练赛第4场D题(多米诺骨牌)
题目来自FZU2163 多米诺骨牌 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description Vasya很喜欢排多米诺 ...
- P1282 多米诺骨牌 (背包变形问题)
题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...
- P1282 多米诺骨牌
P1282 多米诺骨牌 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S ...
随机推荐
- java工厂模式个人体会
上一边文章主要对单例模式做了一个总结,这篇文章主要对工厂模式也写一写个人的体会. 工厂模式是设计模式的一种,它主要是把实现产品对象的过程封装起来,然后提供给客户端相应的接口.工厂模式也是有3种,分别为 ...
- border实现三角形的原理
前言:网上最普遍的实现三角形的方法,就是通过控制border来实现,那为什么可以呢? 原理 我们先来看看border的表现形式. #box{ width:100px; height:100px; ba ...
- CSS属性之padding
0.inline元素中的padding 大家都知道padding对于block元素和inline-block元素的影响,而对于inline元素,padding只会在水平方向产生影响,垂直方向不会产生影 ...
- 使用iview时,页面没了滚动条
场景:页面中有一个确认按钮,保存后弹框预览在点保存按钮,实现数据提交.提交后回到数据列表页,用this.$router.push('list'),返回后页面无法滚动了. 原因:排查后发现弹框时在bod ...
- JQuery 更改属性 JQ对象循环 each 全选反选 三元运算
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 软工读书笔记 week 1
这次读书笔记主要是就<程序员修炼之道>这本书的前半部分做一些总结以及发表一些自己的看法. 本书前面的一部分主要是一些程序员应该在工作中时刻注意的事情,一些关键的信息如下: 1.处理问题的态 ...
- restful知识点之三restframework认证-->权限-->频率
认证.权限.频率是层层递进的关系 权限业务时认证+权限 频率业务时:认证+权限+频率 局部认证方式 from django.conf.urls import url,include from djan ...
- Redis(二):c#连接Redis
1.nuget StackExchange.Redis 2.建立RedisHelper类: public class RedisHelper { /// <summary> /// 连接字 ...
- win8.1 安装msi软件出现 2503、2502
问题现象: 安装Msi封包的程序的时候,老是提示 2503 和 2502 错误. 解决办法: 命令提示符提示安装程序权限 右击开始按钮,然后选择命令提示如(管理员)
- 【转】outlook 2016 配置自动发现
今天一部门经理换了高大上的终端,办公软件安装的是office 2016,在配置outlook的时候,懵逼了,没有exchange 选项,使用自动发现配置的时候,电脑没有加域,各种尝试,一直过不去,哎, ...