P4928 [MtOI2018] 衣服?身外之物!

news/2024/9/24 7:21:47/文章来源:https://www.cnblogs.com/wyl123ly/p/18428269

Problem link

P4928 [MtOI2018] 衣服?身外之物!

状态设计

看到题目发现 \(n\le4\) 则容易想到使用状态压缩dp,先设计状态 \(dp_{j,i}\) 表示第 \(i\) 天状态为 \(j\) 时的最大舒适值。

但是这里的状态 \(j\) 不能用以前的二进制来表示,注意到题目中还有一个限制条件“清洗时间”,则需要将这个“清洗时间”加入我们的状态设计当中。

发现题目条件中的 \(y\le6\),则可以用七进制来表示状态 \(j\),其中 \(j\) 的第 \(cnt\) 个进制位上的值代表到达这一天第 \(cnt\) 件衣服还有几天清洗完成。

状态转移

状态设计完成,接下来考虑如何转移状态。

初始化:

显然 \(dp_{0,0} = 0\),且 \(dp\) 其他值初始化为极小值,这里极小值设置为-2e18。

这里很难通过 \(j\) 状态去反推出之前的状态,则我们正推,用 \(status\) 表示 \(j\) 状态下往后一天推出的状态。

我们对于 \(j\) 状态的第 \(cnt\) 个进制位考虑:

设这个进制位的值为 \(val\)

如果 \(val\) 不为零,则 \(status\) 的第 \(cnt\) 个进制位上的值等于 \(val - 1\),因为每过一天清洗时间就减少1。

如果 \(val\) 为零,则先不管。

(因为 \(val\) 为零代表可以在这一天选中这件衣服穿,而一天只能选择一件衣服,但是有可能有很多个 \(val\) 为零的“待选衣服”)

代码:

int num = j;
while(num){if(num % 7 != 0) status += p(7,cnt) * ((num % 7) - 1);num /= 7;cnt++;
}

其中函数p是 \(7^{cnt}\) 的意思。

接下来处理第 \(cnt\) 个进制位上 \(val\) 为零的情况:

如果我们选了这件衣服的话,状态 \(status\) 会变成 \(status+y_{cnt} \times 7^{cnt}\)

则对于每个 \(val\) 为零的进制位上,可以得到转移 \(dp\) 方程式:

dp[status + y[cnt + 1] * p(7,cnt)][i] = max(dp[status + y[cnt + 1] * p(7,cnt)][i],dp[j][i - 1] + z[i] * x[cnt + 1]);

寻找答案:

\[ans = \max^{7^n-1}_{j=0}\{dp_{j,m}\} \]

判断是否“如果必定有一天gcd没有衣服穿”:

根据数据范围设计一个上界,判断答案是否小于这个上界就可以了。

至此 题目已经差不多做完了。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int MAXN = 2005;
const int INF = -2e18;
int n,m;
int x[MAXN],y[MAXN],z[MAXN];
int p(int a,int x){int ans = 1;for(int i = 1;i <= x;i++) ans *= a;return ans;
}
int dp[2505][MAXN];
void print(int x){for(int i = 1;i <= n;i++){cout<<x % 7;x /= 7;}
}
signed main(){cin>>n>>m;for(int i = 0;i <= MAXN - 2;i++){for(int j = 0;j <= MAXN + 500 - 2;j++){dp[j][i] = INF;}}for(int i = 1;i <= n;i++) cin>>x[i];for(int i = 1;i <= n;i++) cin>>y[i];for(int i = 1;i <= m;i++) cin>>z[i];dp[0][0] = 0;for(int i = 1;i <= m;i++){for(int j = 0;j <= p(7,n) - 1;j++){int status = 0;int num = j;int cnt = 0;while(num){if(num % 7 != 0) status += p(7,cnt) * ((num % 7) - 1);num /= 7;cnt++;}num = j;cnt = 0;for(int k = 1;k <= n;k++){if(num % 7 == 0) {dp[status + y[cnt + 1] * p(7,cnt)][i] = max(dp[status + y[cnt + 1] * p(7,cnt)][i],dp[j][i - 1] + z[i] * x[cnt + 1]);}num /= 7;cnt++;}}}int ans = INF;for(int j = 0;j <= p(7,n) - 1;j++){ans = max(ans,dp[j][m]);}if(ans == INF) cout<<"gcd loves her clothes!";else cout<<ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/802642.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

伯克利函数调用排行榜(BFCL)

自 2022 年底以来,大语言模型(LLMs)凭借其执行通用任务的强大能力,成为众人关注的焦点。不仅限于聊天应用,将这些模型应用于开发各类 AI 应用和软件(如 Langchain, Llama Index, AutoGPT, Voyager)已成为一种趋势。GPT, Gemini, Llama, Mistral 等模型通过与外部世界的交…

读构建可扩展分布式系统:方法与实践13可扩展的事件驱动处理

可扩展的事件驱动处理1. 可扩展的事件驱动处理 1.1. 使用消息传递系统进行通信,你可以创建松耦合的架构1.1.1. 消息生产者只是将消息存储在队列中,而不用关心消费者如何处理消息1.1.2. 有一个或多个消费者,并且生产者和消费者的集合可以随着时间的推移而改变1.1.3. 有助于提…

java基础 -反射笔记

710,反射快速入门 代码: 先创建一个 re.properties 文件:classfullpath=com.hspedu.Cat method=hiCat.javapackage com.hspedu;public class Cat {private String name = "招财猫";public void hi() { //常用方法System.out.println("hi " + name);} …

全网最适合入门的面向对象编程教程:52 Python函数方法与接口-Protocol协议与接口

在Python中,协议(Protocol)和接口(Interface)是用于定义类和对象之间交互的一种方式,特别是在实现多态性和代码可重用性时,协议是一种抽象概念,描述了对象所需实现的方法和属性,而不关心具体的类或实现。全网最适合入门的面向对象编程教程:52 Python 函数方法与接口-…

机器学习第6次作业

机器学习作业6 学号:102102156 姓名:高涛 1. 朴素贝叶斯与KNN分类性能比较 1.1 代码1.2 绘制结果2.维数约简可视化 2.1 代码2.2 绘制结果3.1 降维前后分类精度比较 3.1 代码同上 3.2绘制结果

Docker 部署 vue 项目

概述 技术栈:docker + vue + nginx 1、docker下载安装 nginx docker pull nginx2、创建nginx挂载目录 /usr/local/nginx (可根据自己需要存放文件的位置自行创建目录) mkdir -p /usr/local/nginx3、vim 创建default.conf server {listen 80;server_name localhost;#c…

TCP协议三次握手的个人理解

TCP协议的核心是可靠的数据传输,而保证传输是可靠的那就要求客户端和服务端双方都具备正常的收发功能。 基于此,第一次握手的时候,当服务端接收到这个SYN请求时,表明客户端要进行TCP连接,同步序列号seq=x,那么从服务端的角度来看: 1、客户端的发送能力是正常的; 服务端…

[vulnhub]LAMPSecurity: CTF5

https://www.vulnhub.com/entry/lampsecurity-ctf5,84/主机发现端口扫描探测存活主机,139为靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-23 17:27 CST Nmap scan report for 192.168.75.1 Host is up (0.00049s latency). MAC Address…

jni安全利用的简单学习

首先定义一个最简单的类 public class EvilClass {public static native String execCmd(String cmd); } 因为我是MacOs端,在当前目录执行 javac EvilClass.java javac -h . EvilClass.java 生成 EvilClass.h 文件 /* DO NOT EDIT THIS FILE - it is machine generated */ #i…

day6[Llamaindex RAG实践]

"xtuner是什么?"在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答的能力

【专题】2024AI智慧生活白皮书:AI智能科技重塑居家体验报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=37748 AI 已然成为家电家居市场的创新核心动力,可在个性化识别、预测维护等多方面提升产品价值。家享生活行业智能化展现多元场景,清洁智能崛起超厨房智能居第二,全屋智能潜力巨大。“套装 / 集成智能” 等品类增长快,智能新客多由老客升级…