P4928 [MtOI2018]衣服?身外之物! 题解
题意
gcd 共有 \(n\) 件衣服,编号为 \(A_1,A_2,\cdots A_n\)。
每一件衣服分别拥有颜色值和清洗时间,他在每一件衣服穿完以后都会将其送去清洗,而这件衣服当天所拥有的舒适感取决于当天的天气与他的衣服颜色值的乘积,天气值存在负数。
现给出共 \(m\) 天的天气情况,求最大舒适值。
分析
数据范围极小,考虑状压。
设当前状态为 \(f_{i, j}\) 表示已经过完了第 \(i\) 天,过完第 \(i\) 天之后的衣服状态为 \(j\)。其中 \(j\) 是一个 \(7\) 进制数,它的第 \(k\) 位表示第 \(k\) 件衣服还需要洗几天。(若 \(j = 0\),则表示不需要洗了,可以直接用。)
由于本人比较懒,因此直接用了十进制数代替七进制。(因此拿到了最劣解)。
总状态数最劣为 \(O(m \times \prod y_i)\) 个,在题目数据范围内可过。为了加速,可以提前处理出可用状态。
代码示例
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#define rep(i, a, b) for (int i = (a); i <= (b); i ++ )
using namespace std;
using LL = long long;
const int N = 2010;
int n, m;
int c[N], t[N], w[N];
LL f[N][7000];
vector<int> state;
int get(int x, int k) { // 取出 x 的第 k 位
int res; while (k) res = x % 10, x /= 10, k -- ;
return res;
}
bool check(int s) { // 判断状态 s 是否可用
// 判断条件:1. 没有一位大于它最大的清洗时间
// 2. 必须有至少以为是 0,否则 gcd 将没有衣服穿
for (int i = 1; i <= n; i ++ ) if (get(s, i) > t[i]) return false;
for (int i = 1; i <= n; i ++ ) if (!get(s, i)) return true;
return false;
}
int modify(int s, int k) { // 改动 s 的第 k 位
// 即:其他衣服的清洗时间 - 1,第 k 天的重置位 t[k]
int ans = 0;
for (int i = n; i; i -- )
if (i == k) ans = ans * 10 + t[k];
else ans = ans * 10 + (get(s, i) > 0 ? get(s, i) - 1 : 0);
return ans;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i ++ )
scanf("%d", &c[i]);
for (int i = 1; i <= n; i ++ )
scanf("%d", &t[i]);
for (int i = 1; i <= m; i ++ )
scanf("%d", &w[i]);
for (int i = 0; i < pow(10, n); i ++ ) // 枚举可用状态
if (check(i))
state.push_back(i); // 并存储
memset(f, -0x7f, sizeof f);
f[0][0] = 0;
for (int i = 0; i < m; i ++ )
for (auto j : state)
for (int k = 1; k <= n; k ++ )
if (f[i][j] != -0x7f7f7f7f && !get(j, k))
f[i + 1][modify(j, k)] = max(f[i + 1][modify(j, k)], f[i][j] + w[i + 1] * c[k]);
LL res = -0x7f7f7f7f;
for (auto i : state)
res = max(res, f[m][i]);
if (res == -0x7f7f7f7f) puts("gcd loves her clothes!");
else printf("%lld\n", res);
return 0;
}
P4928 [MtOI2018]衣服?身外之物! 题解的更多相关文章
- 题解 Cicada 拿衣服
传送门 神仙题! 听@Yubai给我讲了半个下午,快%@Yubai 见到这些奇奇怪怪的题是不是应该试着证下状态数上界啊 首先观察题目里给的柿子,可以发现 \(or-and\) 单调增, \(min-m ...
- 题解 P7623 [AHOI2021初中组] 收衣服
我还在小学的时候以现在初中名义我大五十牛逼参加了这次,然后身败名裂死磕这道题不会,现在觉得自己好傻啊 233333 显然这是要统计每个区间的贡献,所以我们可以打出来这个暴力,统计每个区间的次数,对于 ...
- CSUST选拔赛题解
本鶸鸡于本月10号参加了蔽校的选拔赛,成绩差的死,大部分的题都是赛后花了好长时间才补出来的,其中有些题还是靠QAQorz大佬帮忙才能解决,感谢Qls对我的帮助~接下来就附带上我的暴力题解,大佬们有更好 ...
- Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心
1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 338 Solved: 136[Submit] ...
- 洛谷 P2921 在农场万圣节Trick or Treat on the Farm题解
题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定 ...
- [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)
题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...
- 牛客编程巅峰赛S1第3场 - 青铜&白银 C.牛牛晾衣服(二分)
题意:有\(n\)件衣服,每件衣服都有\(a_{i}\)滴水,所有衣服每分钟都能自然烘干\(1\)滴水,或者用烘干机,每分钟可以烘干\(k\)滴水,问最快多少分钟可以使所有衣服都烘干. 题解:这题和之 ...
- A. 【例题1】奶牛晒衣服
A . [ 例 题 1 ] 奶 牛 晒 衣 服 A. [例题1]奶牛晒衣服 A.[例题1]奶牛晒衣服 关于很水的题解 既然是最少时间,那么就是由最湿的衣服来决定的.那么考虑烘干机对最湿的衣服进行操作 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
随机推荐
- flask中cookies的使用
flask中cookies的使用 在Flask中对cookie的处理 1. 设置cookie: 设置cookie,默认有效期是临时cookie,浏览器关闭就失效 可以通过 max_age 设置有效期, ...
- Python并发编程——paramiko远程控制的模块、病毒攻击原理、dll注入、
文章目录 paramiko模块 作业 攻击原理解析 一.什么是dll 二.为何要有dll 什么是dll注入: 什么时候需要dll注入 dll注入的方法 使用SetWindowsHookEx函数对应用程 ...
- 如何编写难以维护的 React 代码?耦合通用组件与业务逻辑
在众多项目中,React代码的维护经常变得棘手.其中一个常见问题是:将业务逻辑直接嵌入通用组件中,导致通用组件与业务逻辑紧密耦合,使其失去"通用性".这种做法使通用组件过于依赖具体 ...
- 【Unity3D】UI Toolkit数据动态绑定
1 前言 本文将实现 cvs 表格数据与 UI Toolkit 元素的动态绑定. 如果读者对 UI Toolkit 不是太了解,可以参考以下内容. UI Toolkit简介 UI Toolki ...
- js数据结构--散列表
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- iframe用的场景
iframe可用在以下几个场景中: 1:典型系统结构,左侧是功能树,右侧就是一些常见的table或者表单之类的.为了每一个功能,单独分离出来,采用iframe. 2:ajax上传文件. 3:加载别的网 ...
- JS逆向实战25——某壳找房模拟登录+百度喵星人指纹加密破解.
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标 目标网站 aHR0c ...
- 搞懂闭包JavaScript的GC机制
其实不管什么语言,都有一套垃圾回收机制.为什么要有垃圾回收机制?因为内存,程序运行需要内存,如果没有垃圾回收(循环引用,内存泄漏),那么内存占用就会越来越高,轻点说会影响性能卡顿,严重的直接导致崩溃. ...
- Velocity之Hello World(tomcat下配置Velocity)
本文主要参考:http://hi.baidu.com/dalianjingying/item/1fb3a98ad64dcac299255f72 http://wangbaoaiboy.blog.163 ...
- Acwing127周赛第三题 构造矩阵 (套路)
题目链接:构造矩阵 题目描述 我们希望构造一个 n×m 的整数矩阵. 构造出的矩阵需满足: 每一行上的所有元素之积均等于 k. 每一列上的所有元素之积均等于 k. 保证 k 为 1 或 −1. 请你计 ...