洛谷1941(dp)
2024-09-05 11:00:47
常规的dp,当前有值且碰不到管子就转移,可以连跳的操作我就加了一维表示当前是不是连跳过来的。第二问前缀和即可得(不对啊边走边记录就行了吧我冗了Orz)。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1e4 + 5, maxm = 1e3 + 5;
const int inf = 0x3f3f3f3f;
int n, m, k;
int dp[maxn][maxm][2], cnt[maxn];
pair<int, int> go[maxn], limit[maxn];
int Judge() {
int res = inf;
for (int j = 1; j <= m; j++) {
res = min(res, dp[n][j][0]);
}
return res;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = 0; i < n; i++) {
int up, down;
scanf("%d %d", &up, &down);
go[i] = {up, down};
limit[i] = {1, m};
}
limit[n] = {1, m};
for (int i = 0; i < k; i++) {
int j, l, r;
scanf("%d %d %d", &j, &l, &r);
limit[j] = {l + 1, r - 1};
cnt[j]++;
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= m; j++){
dp[i][j][0] = dp[i][j][1] = inf;
}
}
for (int i = 0; i < n; i++) {
for (int j = 1; j <= m; j++) {
for (int k = 0; k <= 1; k++) {
if (dp[i][j][k] != inf) {
int high = min(j + go[i].first, m);
if (high >= limit[i + 1].first && high <= limit[i + 1].second)
dp[i + 1][high][0] = min(dp[i + 1][high][0], dp[i][j][k] + 1);
dp[i][high][1] = min(dp[i][high][1], dp[i][j][k] + 1);
int low = j - go[i].second;
if (!k && low >= limit[i + 1].first && low <= limit[i + 1].second)
dp[i + 1][low][0] = min(dp[i + 1][low][0], dp[i][j][k]);
}
}
}
}
int ans = Judge();
if (ans == inf) {
for (int i = n - 1; i >= 0; i--) {
for (int j = 1; j <= m; j++) {
if (dp[i][j][0] != inf) {
for (int t = 1; t <= n; t++) cnt[t] += cnt[t - 1];
printf("0\n%d\n", cnt[i]);
return 0;
}
}
}
} else {
printf("1\n%d\n", ans);
}
return 0;
}
最新文章
- 原生js事件委托
- linux下的/dev/shm目录
- CE5 WiFi开关
- cocos2dx3.0 removeFromParent和removeAllChildren含义
- eclipse android 不会自动生成R.java文件和包的解决办法
- Flash安全的一些总结
- synchronized关键字
- SQLServer2008修改sa密码的方法与SQL server 2008数据库的备份与还原
- ASP.NET MVC编程——视图
- MySQL-压缩版-windows安装
- 阿里云MySQL远程连接不上问题
- jdk版本相关问题
- Thymeleaf的一些操作
- mysql for循环存储过程
- fmt.printf输出的格式
- QT 实现图片旋转的两种方法
- php 获取读取文件内容
- Python 函数介绍
- ISP与DSP的区别【转】
- mtk 无线配置文件生效过程
热门文章
- 高精度乘法(FFT)
- 数据结构之 字符串---字符串匹配(kmp算法)
- Linux档案属性
- Linux-用户和权限
- 三剑客之awk数组实战
- BZOJ_1004_[HNOI2008]Cards_burnside+DP
- BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt
- BZOJ_3489_ A simple rmq problem_KDTree
- codevs 3012 线段覆盖4
- c++之函数值传递和引用传递解析----关键在于理解函数return的实现机制(内存分配)