首页 > 其他分享 >P6883 [COCI2016-2017#3] Kroničan

P6883 [COCI2016-2017#3] Kroničan

时间:2023-11-04 23:25:17浏览次数:43  
标签:状态 Kroni COCI2016 有水 倒入 int 2017 dp 杯子

一眼丁真:一道简单的入门的小清新状压好题

分析

根据题意,每一个杯子只有有水或没水这两种状态。很容易想到用二进制去表示。有水为 $0$,没水为 $1$。

举个例子,有两个杯子所有杯子都没有水,那么状态为 $11$。

设 $dp[i]$ 表示从初始状态到状态 $i$ 所需的最小代价。

另外我们可以想到一个性质,例如说 $x$ 倒入 $y$ 中,$z$ 再倒往 $y$ 中,$y$ 倒入 $k$ 中与 $x$ 倒入 $y$ 中,$y$ 再倒往 $k$ 中,$z$ 倒往 $y$ 中,$y$ 有再一次倒入 $k$ 中是等价的。也就是倒入一个空杯子中与倒往这个杯子没空的时候可能是一样的。所以对于每一个状态 $i$,若当前有一个水杯没有水并且在上一步有水,则肯定是倒给了当前所有有水的杯子中的其中一个,而不是倒入没水的杯中。就不用算重复的情况了。

那么我们很容易想出转移方程:

$$dp[i] = \min(dp[i \oplus (1 << j)] + c[j][k], dp[i])$$

其中 $j$ 表示当前没有水的水杯,$k$ 表示当前有水的水杯,当然 $0 \le j, k < n$。下标从 $0$ 开始。而 $i \oplus (1 << j)$ 表示能转移到 $i$ 这个状态的状态。

初始化。

根据题意和定义 $dp[0] = 0$,其余则为正无穷。

答案就是在合法的状态中取最小值。

$0$ 的个数小于等于 $k$ 的状态即为合法。

当然,有一个小地方要注意,从 $x$ 杯倒入 $y$ 杯的价值可能不等于从 $y$ 杯 倒入 $x$ 杯的价值。

时间复杂度 $O(2nn2)$。对于这题够用了。

Code

下面的 __builtin_popcount(i) 是求出 $i$ 在二进制下有多少个 $1$。

顺便告诉你,吸个氧就逼近最优解了。

#include <bits/stdc++.h>
using namespace std;

int n, k, dp[(1 << 20) + 5], c[25][25];

int main() {
cin >> n >> k;
memset(dp, 0x3f, sizeof dp);
for (int i = 0; i < n; i++)//下标从 0 开始。
for (int j = 0; j < n; j++)
cin >> c[i][j];
dp[0] = 0;
for (int i = 1; i < (1 << n); i++) {
for (int j = 0; j < n; j++) {
if (i & (1 << j))//如果 j 这一杯没水。
for (int k = 0; k < n; k++)
if (!(i & (1 << k)))//找到当前有水的杯子,可能在上一步 j 的水倒入了 $k$。
dp[i] = min(dp[i], dp[(i - (1 << j))] + c[j][k]);//一定是 c[j][k]
}
}
int ans = 1e9;
for (int i = 0; i < (1 << n); i++)
if (__builtin_popcount(i) >= n - k)//也可以写成 n - __builtin_popcount(i) <= k,就是需要 0 的个数小于等于 k,或 1 的个数大于等于 k。
ans = min(ans, dp[i]);
cout << ans;
return 0;
}

后记

CSP2023 后的第一篇题解还是随机跳题来的捏。

若蒟蒻有空,会解答评论区的问题的。QwQ。

蒟蒻可能有笔误,欢迎大佬们来纠正。

标签:状态,Kroni,COCI2016,有水,倒入,int,2017,dp,杯子
From: https://www.cnblogs.com/luckycloud/p/17810017.html

相关文章

  • P3784 [SDOI2017] 遗忘的集合
    传送门description对于一个元素都\(\leqn\)的正整数集合\(S\)(不含相同元素),\(f(i)\)表示使用集合\(S\)里的数加和为\(i\)的方案数,每个元素可以被使用多次,两个方案不同当且仅当存在一个元素在两种方案中使用次数不同。现给定\(n\)和\(f(i),1\leqi\leqn\)。求出集......
  • 解题报告 P3704 [SDOI2017] 数字表格
    P3704[SDOI2017]数字表格经典莫反。题目要求:\[\prod_{i=1}^n\prod_{j=1}^mfib(\gcd(i,j))\]不妨令\(n<m\)。套路地,我们设\(\gcd(i,j)=d\),然后枚举\(d\):\[\begin{aligned}&\quad\prod_{d=1}^n\prod_{i=1}^n\prod_{j=1}^mfib(d)^{[\gcd(i,j)==d]}\\&=\pr......
  • P3746 [六省联考 2017] 组合数问题
    看了题解才悟了,我还是太菜了。solution要求\[\left(\sum_{i=0}^\inftyC_{nk}^{ik+r}\right)\bmodp\]这个形式很像生成函数吧。我们套用生成函数:\[G(x)=\sum_{i=0}^{\infty}\begin{pmatrix}nk\\i\end{pmatrix}x^i\]所求即为\[\sum_{i\bmodk=r}[x^i](1+x)......
  • 【洛谷 8649】 [蓝桥杯 2017 省 B] k 倍区间
    题目描述给定一个长度为 �N 的数列,�1,�2,⋯��A1​,A2​,⋯AN​,如果其中一段连续的子序列 ��,��+1,⋯��(�≤�)Ai​,Ai+1​,⋯Aj​(i≤j) 之和是 �K 的倍数,我们就称这个区间 [�,�][i,j] 是 �K 倍区间。你能求出数列中总共有多少个 �K 倍区间吗?输入格式第一行包含两个整数 �N 和 �K......
  • Visual Studio 2017标准库、 Windows SDK 10标准库目录
    VisualStudio2017标准库VC\Tools\MSVC\14.16.27023\include目录包含了VisualC++14.16.27023版本的标准库头文件(也就是VC++2017版本),包括、、等常用头文件。这些头文件定义了各种数据类型、函数、类等,供程序员使用。如果你使用VisualStudio2017或更高版本进行开发......
  • Altium Designer 2017「AD 17」精简汉化版下载附安装激活步骤
    AltiumDesigner17(简称AD17)是一款专业的PCB电路设计软件,新版带来了大量实用更新和增强,如全新的PCB布线及增强技术、动态铺铜、自动交叉搜索等等。设计者能够运用该版本中提供的诸多全新功能,将自己从干扰设计工作的琐碎任务中解放出来,从而完全专注于设计本身,尽情享受创新激情。软......
  • 【洛谷 8647】[蓝桥杯 2017 省 AB] 分巧克力
    #[蓝桥杯2017省AB]分巧克力##题目描述儿童节那天有$K$位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有$N$块巧克力,其中第$i$块是$H_i\timesW_i$的方格组成的长方形。为了公平起见,小明需要从这$N$块巧克力中切出$K$块巧克力分给小......
  • cuda visual studio integration vs2017安装失败
    版本不匹配?还是之前安装了旧的nvidia程序?参考1:https://zhuanlan.zhihu.com/p/150579521?utm_id=0()参考2:https://blog.csdn.net/qq_40963335/article/details/104907922(有用)删除任何已安装的nvidia相关程序包。再安装cuda就不报错了。 (以下信息仅适用于NsightVisualStudio功......
  • 洛谷 P4749 [CERC2017] Kitchen Knobs 题解
    KitchenKnobs首先,一个trivial的想法是,因为每个旋钮如果上面的数字并非全部相同则其必有唯一最优位置,故直接扔掉那些全部相同的旋钮,对于剩余的求出其最优位置。明显此位置是一\(0\sim6\)的数。因为是区间同时旋转,所以转成数之后就是区间加同一个数。一个经典套路是差分。这......
  • Secure Code Warrior C# Basic OWASP Web Top 10 2017 8: Insecure deserialization,
    Lastbutnotleast.Thesesetchallengesconsistof8:Insecuredeserialization,9:UsingComponentswithKnownVulnerabilities,10:InsufficientLoggingandMonitoring8:Insecuredeserialization, 9:UsingComponentswithKnownVulnerabilities, 10:I......