洛谷 P1282 多米诺骨牌 ( 线性DP )
题意 : 题目链接
分析 :
一开始这个想法也有想到,但是貌似要开很大数组,就感觉应该不行
遂放弃想其他方法,万万没想到注意到可以滚动优化(其实不优化也可以过)
定义 dp[i][j] 表示 到第 i 个数为止,凑成 j 分数所要转的最小次数
转移方程如下
若选择旋转 i 这个多米诺 dp[i][j-Sub[i]] = min( dp[i][j-Sub[i]], dp[i-1][j] )
若选择不旋转 dp[i][j+Sub[i]] = min( dp[i][j+Sub[i]], dp[i-1][j] + 1 )
但是有个问题,就是需要考虑第二维分数有负数的情况
加上一个偏移量就行了,转负为正
#include<bits/stdc++.h>
using namespace std;
;
const int INF = 0x3f3f3f3f;
][(*maxn)<<];
int L[maxn], R[maxn], Sub[maxn];
int main(void)
{
;
scanf("%d", &N);
; i<=N; i++)
scanf("%d %d", &L[i], &R[i]),
Sub[i] = L[i] - R[i],
Tot += abs(Sub[i]);
memset(dp, INF, sizeof(dp));
dp[][Tot] = ;
;
; i<=N; i++){
; j<=(Tot<<); j++){
&& j+Sub[i] <= (Tot<<) )
dp[idx][j+Sub[i]] = min(dp[idx][j+Sub[i]], dp[idx^][j]);
&& j-Sub[i] <= (Tot<<) )
dp[idx][j-Sub[i]] = min(dp[idx][j-Sub[i]], dp[idx^][j]+);
}
if(i != N){///滚动优化的话,每一层的初始都是 INF,所以对于下一层就要赋值为 INF
idx ^= ;
; j<=(Tot<<); j++)
dp[idx][j] = INF;
}
}
int ans = INF;
&& r<=(Tot<<); l--,r++){///加上偏移量后 0 由 Tot 代替,从 0 开始左右扫,扫到第一个翻转次数不是初始值的便是答案
if(dp[idx][l] != INF && dp[idx][r] != INF) ans = min(dp[idx][l], dp[idx][r]);
else if(dp[idx][l] != INF) ans = dp[idx][l];
else if(dp[idx][r] != INF) ans = dp[idx][r];
if(ans != INF) break;
}
printf("%d\n", ans);
;
}
洛谷 P1282 多米诺骨牌 ( 线性DP )的更多相关文章
- 洛谷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】
题目:https://www.luogu.org/problemnew/show/P1282 题意: 给定n个牌,每个牌有一个上点数和下点数.可以通过旋转改变交换上下点数. 问使得上点数之和和下点数之 ...
- 洛谷 P1282 多米诺骨牌("01"背包)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://blog.csdn.net/Darost/artic ...
- 洛谷 [P1282] 多米诺骨牌
这道题是一道背包问题,考虑一个背包, 显然如果我们直接设dp[i]表示前i个使差值最小所需的最少翻转次数,是具有后效性的. 所以我们将直接求最值,改为求某个值是否可行,这种求最值转变为求可行性的思想是 ...
- 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 提交记录 查看题解 标签 查看算 ...
随机推荐
- linux 更改文件权限命令 chmod
chmod -change file mode bits :更改文件权限 chmod是用来改变文件或者目录权限的命令,但只有文件的属主和超级用户(root)才有这种权限. 更改文件权限的2种方式: 一 ...
- dp入门题(数塔)
http://acm.hdu.edu.cn/showproblem.php?pid=2084 题意: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上 ...
- yii框架RBAC權限管理
基于角色的存取控制 (RBAC) 基于角色的存取控制 (RBAC) 提供了一个简单而强大的集中式存取控制机制. 详细的关于 RBAC 和诸多传统的存取控制方案对比的详情,请参阅 Wikipedia. ...
- python简介与简单入门
1.计算机基础 计算机组成: 输入输出设备内. 存储器 .cpu .电源 .显卡 中央处理器(cpu) 处理各种数据 相当于人的大脑 内存 存储数据 相当于临时记忆 硬盘 存储数据 相当于人的永久记忆 ...
- SCUT - 492 - 鬼符「搦手的鬼畜生」 - 简单数学
https://scut.online/p/492 求[1,a]范围内的a模m的逆元的数量. 一开始用扩展欧几里得算法草了一发,WA了,当时不太清楚模非质数的周期,看来扩展欧几里得算法的笔记才知道要加 ...
- Jmeter 设置默认语言为中文
1.在apache-jmeter-4.0\bin目录下,打开jmeter.properties; 2.将#language=en改为#language=cn,保存 3.重新启动jmeter.
- static修饰的成员与非static修饰类的成员的区别
① 格式 : 1> static修饰的,称为静态成员,非static修饰的,称为非静态成员. ② 内存位置: 1>static修饰的,在方法区的静态区中,非static修饰的,在堆中的对象 ...
- qt使用QWT注意事项
当继承某个QWT类时,有是使用O_OBJECT弘会出现问题 切记在工程文件里别忘了添加这一句 DEFINES+=QWT_DLL
- 程序员称为高手的10条心得(摘自http://www.jizhuomi.com/software/394.html)
在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer).经 ...
- 为了实现动态加载而编写的自己的ClassLoader
Copy备用 之前客户要求在不重启应用的前提下实现动态增加服务及交易,在网上查了很长时间也没发现类似的技术,最后研究了一下ClassLoader.因为项目是与Spring,一开始我和同事尝试替换源码的 ...