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 ... 
随机推荐
- 一文教你理解Kafka offset
			日常开发中,相信大家都对 Kafka 有所耳闻,Kafka 作为一个分布式的流处理平台,一般用来存储和传输大量的消息数据.在 Kafka 中有三个重要概念,分别是 topic.partition 和 ... 
- LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题
			️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ... 
- strcpy()函数详解
			strcpy()函数是C语言中的一个复制字符串的库函数,以下将详细解释说明一下: · 函数声明以及实现代码 char *strcpy(char *dst, const char *src);char ... 
- 超级实用!React-Router v6实现页面级按钮权限
			大家好,我是王天- 今天咱们用 reac+reactRouter来实现页面级的按钮权限功能.这篇文章分三部分,实现思路.代码实现.踩坑记录. 嫌啰嗦的朋友,直接拖到第二章节看代码哦. 前言 通常情况下 ... 
- 前端三件套系例之CSS——CSS3基础布局
			文章目录 css基础布局 1.布局相关的标签 2.盒子模型 2-1 什么是盒子模型 2-2 margin外边距 2-3 padding内填充 2-4 案例 3.浮动(float) 3-1 什么是浮动 ... 
- 【羚珑AI智绘营】分分钟带你拿捏SD中的色彩控制
			导言 颜色控制一直是AIGC的难点,prompt会污染.img2img太随机- 今天带来利用controlnet,实现对画面颜色的有效控制.都说AIGC是抽卡,但对把它作为工具而非玩具的设计师,必须掌 ... 
- React 基础介绍以及demo实践
			这篇文章是之前给新同事培训react基础所写的文章,现贴这里供大家参考: 1.什么是React? React 是一个用于构建用户界面的JavaScript库核心专注于视图,目的实现组件化开发 2.组件 ... 
- Java技术_基础技术(0003)_类执行顺序详解+实例(阿里面试题)+详细讲解+流程图
			类加载机制 加载.验证.准备.初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的 ... 
- postgresql 标量子查询改写的各种姿势
			同事提供一条SQL,原执行时间需要 3.6S ,反馈比较慢需要优化一下,废话不说贴SQL: 原SQL: select ((select count(1) FROM AAAAAAAAA wf join ... 
- WebViewJavascriptBridge.js代码学习
			//notation: js file can only use this kind of comments //since comments will cause error when use in ... 
