前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【第009题】题解及代码分享:【难度】标签有毒,状压DP,CF1042B-Vitamins

【第009题】题解及代码分享:【难度】标签有毒,状压DP,CF1042B-Vitamins

作者头像
小码匠
发布2023-11-20 14:23:01
2890
发布2023-11-20 14:23:01
举报
文章被收录于专栏:小码匠和老码农

大家好!我是小码匠。

今天分享的题目是状压DP题,这道题最大槽点:难度标签不太对,状压DP一般都要【普及/提高-】起。

路漫漫其修远兮,吾将上下而求索

离自己的既定目标:

  • 目标:300道
  • 已完成:9道
  • 待完成:291道

已完成目标:

分类

算法

题目

算法基础

前缀和

【第001题】题解分享:湖南省选->激光炸弹

算法基础

差分

【第002题】题解分享:P4552 [Poetize6] IncDec Sequence

算法基础

高维前缀和

【第003题】题解及代码分享:CodeForces 165E Compatible Numbers

算法基础

尺取

【第004题】题解及代码分享:AtCoder ABC326-C

动态规划

动态规划

【第005题】题解及代码分享:AtCoder ABC326-D

算法基础

高维前缀和

【第006题】题解及代码分享:高位前缀和之AtCoder ARC100 - E Or Plus Max

动态规划

数位DP

【第007题】题解及代码分享:数位DP经典模版题 [SCOI2009] windy 数

动态规划

数位DP

【第008题】题解及代码分享:数位DP[ZJOI2010] 数字计数

前置知识

  • 状压 DP
    • https://oi-wiki.org/dp/state/

题目描述

数据有n组数,每组数有一个价值

c_i

和一个字符串S,字符串S中包含3个字母A,B,C,问集齐ABC三个字母的最小价值(一个字母可以有多个)

输入输出样例

输入 #1

代码语言:javascript
复制
4
5 C
6 B
16 BAC
4 A

输出 #1

代码语言:javascript
复制
15

输入 #2

代码语言:javascript
复制
2
10 AB
15 BA

输出 #2

代码语言:javascript
复制
-1

输入 #3

代码语言:javascript
复制
5
10 A
9 BC
11 CA
4 A
5 B

输出 #3

代码语言:javascript
复制
13

输入 #4

代码语言:javascript
复制
6
100 A
355 BCA
150 BC
160 AC
180 B
190 CA

输出 #4

代码语言:javascript
复制
250

输入 #5

代码语言:javascript
复制
2
5 BA
11 CB

输出 #5

代码语言:javascript
复制
16

题解

AC代码
代码语言:javascript
复制
#include <bits/stdc++.h>

using namespace std;

int dp[1 << 3], num[1005], w[1005];
const int INF = 0x3f3f3f3f;

void best_coder() {
    memset(dp, INF, sizeof(dp));
    int n;
    cin >> n;
    int l = 0;
    for (int i = 0; i < n; ++i) {
        string s;
        cin >> w[i + 1] >> s;
        int t = 0;
        for (int j = 0; j < s.size(); ++j) {
            t = t | (1 << (s[j] - 'A'));
        }
        num[++l] = t;
    }

    dp[0] = 0;
    for (int j = 1; j <= n; ++j) {
        for (int i = (1 << 3) - 1; i >= 0; --i) {
            dp[i | num[j]] = min(dp[i | num[j]], dp[i] + w[j]);
        }
    }
    if (dp[(1 << 3) - 1] == INF) {
        cout << -1;
    } else {
        cout << dp[(1 << 3) - 1];
    }
}

void happy_coder() {

}

int main() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    // 小码匠
    best_coder();

    // 最优解
    // happy_coder();

    return 0;
}

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 路漫漫其修远兮,吾将上下而求索
  • 前置知识
  • 题目描述
  • 输入输出样例
    • 题解
      • AC代码
相关产品与服务
标签
标签(Tag)是腾讯云推出的云资源管理工具,您可从不同维度对具有相同特征的云资源进行分类、搜索和聚合,从而轻松管理云上资源。 标签是由标签键和标签值共同组成,您可以为云资源创建和绑定标签
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档