BZOJ1802: [Ahoi2009]checker(性质分析 dp)
时间:2022-06-18
本文章向大家介绍BZOJ1802: [Ahoi2009]checker(性质分析 dp),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意
Sol
一个不太容易发现但是又很显然的性质:
如果有两个相邻的红格子,那么第一问答案为0, 第二问可以推
否则第一问答案为偶数格子上的白格子数,第二问答案为偶数格子上的红格子数
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
//#define int long long
#define LL long long
#define Fin(x) {freopen(#x".in","r",stdin);}
#define Fout(x) {freopen(#x".out","w",stdout);}
using namespace std;
const int MAXN = 1001, mod = 1e9 + 7, INF = 1e9 + 10;
const double eps = 1e-9;
template <typename A, typename B> inline bool chmin(A &a, B b){if(a > b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline bool chmax(A &a, B b){if(a < b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline LL add(A x, B y) {if(x + y < 0) return x + y + mod; return x + y >= mod ? x + y - mod : x + y;}
template <typename A, typename B> inline void add2(A &x, B y) {if(x + y < 0) x = x + y + mod; else x = (x + y >= mod ? x + y - mod : x + y);}
template <typename A, typename B> inline LL mul(A x, B y) {return 1ll * x * y % mod;}
template <typename A, typename B> inline void mul2(A &x, B y) {x = (1ll * x * y % mod + mod) % mod;}
template <typename A> inline void debug(A a){cout << a << 'n';}
template <typename A> inline LL sqr(A x){return 1ll * x * x;}
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, a[MAXN];
LL f[MAXN];
signed main() {
N = read();
int ans[2] = {0, 0}, flag = 0;
memset(f, 0x3f, sizeof(f));
for(int i = 1; i <= N; i++) {
a[i] = read();
if(i > 2 && a[i] && a[i] == a[i - 1]) flag = 1;
if((!(i & 1))) ans[a[i]]++;
if(a[i]) f[i] = 1;
}
if(!flag) {printf("%dn%d", ans[0], ans[1]); return 0;}
for(int i = 2; i < N; i++) {
if(a[i] && a[i + 1]) {
for(int j = i - 1; j > 1; j--) chmin(f[j], f[j + 1] + f[j + 2]);
for(int j = i + 2; j < N; j++) chmin(f[j], f[j - 1] + f[j - 2]);
}
}
LL out = 0;
for(int i = 2; i < N; i += 2) out += f[i];
cout << 0 << "n" << out;
return 0;
}
/*
5
0 0 1 1 0
*/
- 塔秘 | 从Zero到Hero,一文掌握Python关键代码
- 微信小程序请求server时遇到的2个问题
- Android NDK层编译OpenCV代码开发详解
- 实时通信框架 Socket.IO
- Kafka 快速起步
- 老司机带你用python来爬取妹子图
- 爬虫必学知识之正则表达式下篇
- 爬虫必学知识之正则表达式上篇
- python爬虫常用库之requests详解
- python爬虫常用库之urllib详解
- 如何 build 出尽可能小的 docker image?
- 一步一步教你如何用python操作mysql
- 利用Python实现卷积神经网络的可视化
- SDP(13): Scala.Future - far from completion,绝不能用来做甩手掌柜
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法