[COCI2016-2017#3] Kroničan 解题记录

[COCI2016-2017#3] Kroničan 解题记录


题意简述

N N N 个装有水的杯子,你需要通过从一个杯子向另一个杯子倒水,使这些杯子里面至多有 K K K 个有水,从杯子 i i i 往杯子 j j j 倒水的代价是 C i , j C_{i,j} Ci,j


题目分析

数据范围: 1 ≤ N ≤ 20 1 \leq N \leq 20 1N20,一眼状压。
d p S dp_S dpS 表示当前装有水的杯子集合为 S S S,每次枚举从杯子 k ∈ [ 1 , n ] k \in [1,n] k[1,n] 向杯子 j ∈ [ 1 , n ] j \in [1,n] j[1,n]倒水。因为一开始所有杯子都有水,越到后面水越少,所以考虑倒序转移,即从 2 n − 1 2^n-1 2n1 1 1 1 转移。
状态转移方程:
d p S ⨁ j ← min ⁡ k = 1 n d p S + C j , k dp_{S \bigoplus {j}} \gets \min \limits _{k=1}^{n}dp_{S}+C_{j,k} dpSjk=1minndpS+Cj,k
对于最后统计答案,我们可以用 __builtin_popcount() 函数(我这里是手写的),对于二进制中 1 1 1 的个数小于等于 K K K 的更新。


AC Code
#include<bits/stdc++.h>
#define arrout(a,n) rep(i,1,n)std::cout<<a[i]<<" "
#define arrin(a,n) rep(i,1,n)std::cin>>a[i]
#define rep(i,x,n) for(int i=x;i<=n;i++)
#define dep(i,x,n) for(int i=x;i>=n;i--)
#define erg(i,x) for(int i=head[x];i;i=e[i].nex)
#define dbg(x) std::cout<<#x<<":"<<x<<" "
#define mem(a,x) memset(a,x,sizeof a)
#define all(x) x.begin(),x.end()
#define arrall(a,n) a+1,a+1+n
#define PII std::pair<int,int>
#define m_p std::make_pair
#define u_b upper_bound
#define l_b lower_bound
#define p_b push_back
#define CD const double
#define CI const int
#define int long long
#define il inline
#define ss second
#define ff first
#define itn int
CI N=25;
int n,K,ans=LLONG_MAX,c[N][N],dp[(1<<N-5)+5];
int calc(int x){
    int cnt=0;
    rep(i,0,20){
        if((x>>i)&1){
            cnt++;
        }
    }
    return cnt;
}
signed main() {
    std::cin>>n>>K;
    rep(i,1,n) {
        rep(j,1,n) {
            std::cin>>c[i][j];
        }
    }
    mem(dp,0x3f);
    dp[(1<<n)-1]=0;
    dep(i,(1<<n)-1,1) {
        rep(j,1,n) {
            if((i>>j-1)&1){
                continue;
            }
            rep(k,1,n) {
                if(!((i>>k-1)&1)) {
                    continue;
                }
                dp[i]=std::min(dp[i],dp[i|(1<<j-1)]+c[j][k]);
            }
        }
    }
    rep(i,1,(1<<n)-1) {
        if(calc(i)<=K) {
            ans=std::min(ans,dp[i]);
        }
    }
    std::cout<<ans;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用pandas进行数据清洗

采集到原始的数据中会存在一些噪点数据&#xff0c;噪点数据是对分析无意义或者对分析起到偏执作用的数据。如何清洗&#xff1a; 清洗空值/缺失值清洗重复值清洗异常值 import pandas as pd from pandas import DataFrame,Series import numpy as np pandas处理空值操作 i…

ppp实验

拓扑图 实验步骤 配置IP地址及创建mp逻辑口 [R1]int ser 3/0/0 [R1-Serial3/0/0]ip add 192.168.1.1 24 [R1-Serial3/0/0] [R2]int se3/0/0 [R2-Serial3/0/0]ip add 192.168.1.2 24 [R2-Serial3/0/0]int mp [R2-Serial3/0/0]int mp-g [R2-Serial3/0/0]int mp-group 0…

中国气象局发布大地磁暴预警:空间站轨道或受影响

什么是地磁暴&#xff1f; 地磁暴作为最典型的太阳爆发活动&#xff0c;一次地磁暴是一次日冕物质抛射过程&#xff0c;能将数以亿吨计的太阳物质以数百千米每秒的高速抛离太阳表面。 不光是巨大质量与速度汇聚成的动能&#xff0c;它们还携带着太阳强大的磁场能&#xff0c;一…

前端基础篇-前端工程化 Vue 项目开发流程(环境准备、Element 组件库、Vue 路由、项目打包部署)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 环境准备 1.1 安装 NodeJs 1.2 验证 NodeJs 环境变量 1.3 配置 npm 的全局安装路径 1.4 切换 npm 的淘宝镜像( npm 使用国内淘宝镜像的方法(最新) ) 1.5 查看镜像…

406. 根据身高重建队列(力扣LeetCode)

文章目录 406. 根据身高重建队列题目描述贪心算法代码 406. 根据身高重建队列 题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &…

tabs自定义样式

使用el-tabs 去修改样式的话比较麻烦&#xff0c;索性直接用div来制作。 <div class"contain"><div class"tab_wrap"><div :class"[skew, first, active 1 ? isActive: ]" click"tabClick(1)"><span class&quo…

HTTP --- 下

目录 1. HTTP请求方式 1.1. HTML 表单 1.2. GET && POST方法 1.2.1. 用 GET 方法提交表单数据 1.2.2. 用 POST 方法提交表单数据 1.2.3. 总结 1.3. 其他方法 2. HTTP的状态码 2.1. 重定向 2.1.1. 临时重定向 && 永久重定向 2.1.2. 302 &&…

3 Spring之DI详解

5&#xff0c;DI相关内容 前面我们已经完成了bean相关操作的讲解&#xff0c;接下来就进入第二个大的模块DI依赖注入&#xff0c;首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法)构造方法 依赖注入描述了在容器中建…

19.严丝合缝的文明——模板方法模式详解

“项目评审的节点又快到了&#xff0c;PPT你写了没&#xff1f;” “Oops&#xff0c;忘了&#xff0c;有模板没&#xff1f;给我一份” 概述 模板&#xff0c;一个频繁出现在办公室各类角色口中的词&#xff0c;它通常意味着统一、高效、经验和优质。各项汇报因为PPT的模板变…

trinus 3d打印机安装调试到成功打印3-没有热床模型脱落底床不粘模型翘边错位

由于没有自带热肠&#xff0c;改装的话需要额外购买配套的热床。但是如果手头没有的话&#xff0c;那只能使用原厂赠送的两张美文纸。美纹纸很容易用破&#xff0c;尤其是喷头可能会划破。另外拆模型的时候会引起气泡。 于是翘边和模型脱落就成了家常便饭。 这些问题的根源都在…

C#学习笔记1:C#基本文件结构与语法

现在开始我的C#学习之路吧&#xff0c;这也许不适合0编程基础的人看&#xff0c;因为我会C语言了&#xff0c;笔记做的可能有思维上的跳跃&#xff0c;如果0基础可能会觉得有些地方转折得莫名奇妙&#xff0c;但我的学习笔记实操还是比较多的&#xff0c;基本都是真实运行程序结…

七.(1)堆排序--前传

目录 七.(1)堆排序--前传 20-堆排序前传-树的基础知识 根节点 叶子节点 树的深度(高度) 树的 度 孩子节点/父亲节点 子树 21.堆排序前传-二叉树的基础知识 二叉树的存储方式: 22-堆排序前传-堆和堆的向下调整 什么是堆? 堆的向下调整性质 23-堆排序的过程演示 七…

Android Preference简单介绍

Android Preference简单介绍 文章目录 Android Preference简单介绍一、前言二、Preference 简单介绍二、PreferenceScreen和SwitchPreference 简单示例2、相关demo代码示例&#xff08;1&#xff09;SettingsActivity.Java&#xff08;2&#xff09;layout\settings_activity.x…

redis复习笔记07(小滴课堂)

在线教育-天热销视频榜单实战-List数据结构设计 我们先随机获取整个列表的内容。 我们模拟一个去添加数据的接口&#xff1a; 运行&#xff1a; 我们可以看到这里的数据。 我们现在启动我们的应用和controller&#xff1a; 就可以查到我们的数据了。 我们进行人工操作位&…

基于unbantu的nginx的配置

目录 前言: 1.安装nginx并进行测试 1.1使用nginx -v 命令查看版本 1.2开启服务 查看端口 1.3测试 2.nginx的静态资源访问配置 2.1创建静态资源存放的目录 2.2写入目录中测试文件对应的内容 2.3修改配置文件 2.4 测试 3.虚拟主机配置 3.1创建目录 3.2写入测试…

PPP MP配置

一.添加接口 每个路由器中添加2SA接口 二.配置IP地址 1.在r2和r3上创建MP [r2]int Mp-group 0/0/0 [r2-Mp-group0/0/0] [r3]int Mp-group 0/0/0 [r3-Mp-group0/0/0] 2.把1中上的接口加入上一步创建的MP [R2]int Serial 3/0/1 [R2-Serial3/0/1]ppp mp Mp-group 0/0/0 [R2]i…

Learn OpenGL 24 点光源阴影

点光源阴影 上个教程我们学到了如何使用阴影映射技术创建动态阴影。效果不错&#xff0c;但它只适合定向光&#xff0c;因为阴影只是在单一定向光源下生成的。所以它也叫定向阴影映射&#xff0c;深度&#xff08;阴影&#xff09;贴图生成自定向光的视角。 本节我们的焦点是…

整数和浮点数分别在内存中的存储

目录 一、整数在内存中的存储二、浮点数在内存中的存储2.1存储2.2取2.2.1 E不全为0或者不全为12.2.2 E全为02.2.3 E全为1 三、题目解析 一、整数在内存中的存储 对于整形来说&#xff1a;数据存放内存中其实存放的是补码。 原因在于&#xff0c;使用补码&#xff0c;可以将符号…

Redis 6和7:探索新版本中的新特性

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! Redis&#xff0c;作为开源的内存数据结构存储系统&#xff0c;以其高性能、丰富的数据结构和广泛的应用场景而深受开发者喜爱。随…

面试题:Java中的类加载器

1. 什么是类加载器&#xff0c;类加载器有哪些? 要想理解类加载器的话&#xff0c;务必要先清楚对于一个Java文件&#xff0c;它从编译到执行的整个过程。 类加载器&#xff1a;用于装载字节码文件(.class文件)运行时数据区&#xff1a;用于分配存储空间执行引擎&#xff1a;…
最新文章