状压dp,HDU1074.Doing Homework

news2024/11/26 12:42:31

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduce his score of the final test, 1 day for 1 point. And as you know, doing homework always takes a long time. So Ignatius wants you to help him to arrange the order of doing homework to minimize the reduced score.

2、输入输出

2.1输入

The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case start with a positive integer N(1<=N<=15) which indicate the number of homework. Then N lines follow. Each line contains a string S(the subject's name, each string will at most has 100 characters) and two integers D(the deadline of the subject), C(how many days will it take Ignatius to finish this subject's homework).

Note: All the subject names are given in the alphabet increasing order. So you may process the problem much easier.

2.2输出

Output

For each test case, you should output the smallest total reduced score, then give out the order of the subjects, one subject in a line. If there are more than one orders, you should output the alphabet smallest one.

3、原题链接

Problem - 1074 (hdu.edu.cn)


二、解题报告

1、思路分析

从数据量上会往状压dp上想

我们用二进制位表示任务是否完成,那么我们最终状态是确定的

如果有n个任务,那么我们的最终状态就是(1 << n) - 1,我们记为ed

对于ed而言,代表n个任务都已经完成,它可以由n个前驱状态转移而来

假如n = 3,那么ed = 111(2),那么可以由011、101、110三个状态转移,分别代表最后完成的任务为任务1、2、3

那么对于011,101,110而言,同样可以由前驱状态转移

那么我们自顶向下进行状态转移即可

2、复杂度

时间复杂度:O(1<<N) 空间复杂度:O(1<<N)

3、代码详解

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <stack>
using namespace std;
const int N = 20, inf = 0x3f3f3f3f;
struct state
{
    int pre, id, t, s;
} f[1 << N];
int cost[N], dead[N], n, tot;
string lessons[N];
void solve()
{
    cin >> n, tot = 1 << n, memset(f, 0, sizeof f);
    for (int i = 0; i < n; i++)
        cin >> lessons[i] >> dead[i] >> cost[i];
    for (int i = 1; i < tot; i++)
    {
        f[i].s = inf;
        for (int j = n - 1; j >= 0; j--)
        {
            if (i & (1 << j))
            {
                int last = i - (1 << j);
                int c = max(0, f[last].t + cost[j] - dead[j]);
                if (f[last].s + c < f[i].s)
                    f[i] = {last, j, f[last].t + cost[j], f[last].s + c};
            }
        }
    }
    cout << f[--tot].s << '\n';
    stack<int> s;
    while (f[tot].t)
    {
        s.emplace(f[tot].id), tot = f[tot].pre;
    }
    while (s.size())
        cout << lessons[s.top()] << '\n', s.pop();
}
int main()
{
    //freopen("in.txt", "r", stdin);
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int _ = 1;
    cin >> _;
    while (_--)
        solve();
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE】_HTTP响应

目录 1. 首行 2. 报头header 3.空行 4. 正文body 1. 首行 响应首行&#xff1a;版本号状态码状态码描述&#xff1b; HTTP状态码描述了这次响应的结果&#xff08;比如成功、失败&#xff0c;以及失败原因等&#xff09;&#xff1b; 1. HTTP状态码有&#xff1a; &#…

【EI会议征稿通知】第三届先进制造技术与制造系统国际学术会议(ICAMTMS 2024)

第三届先进制造技术与制造系统国际学术会议&#xff08;ICAMTMS 2024&#xff09; 2024 3rd International Conference on Advanced Manufacturing Technology and Manufacturing System 随着工业技术的发展&#xff0c;先进制造技术日益成为未来制造业发展的重大趋势和核心内…

Maven属性scope

参考&#xff1a; maven 中 scope标签的作用&#xff08;runtime、provided、test、compile 的作用&#xff09; 【Maven】属性scope依赖作用范围详解 scope为provided

VNCTF2024misc方向部分wp

文章目录 sqlsharkLearnOpenGLez_msbOnlyLocalSql sqlshark tshark -r sqlshark.pcap -Y "http" -T fields -e frame.len -e http.file_data > data.txt不太像常规的盲注&#xff0c;一次性发送两条很类似的payload&#xff0c;比常规的多了一个least在判断passw…

不懂咱就学,记不住多看几遍(二)

一、Redis分布式锁中加锁与解锁、过期如何续命 实现要点&#xff1a; 互斥性&#xff0c;同一时刻&#xff0c;只能有一个客户端持有锁。防止死锁发生&#xff0c;如果持有锁的客户端因崩溃而没有主动释放锁&#xff0c;也要保证锁可以释放并且其他客户端可以正常加锁。加锁和…

TypeScript(二):TypeScript的细节

TypeScript语法细节 联合类型&#xff08;满足其中一个即可&#xff09; 可以使用多种运算符&#xff0c;从现有的类型中构建新类型 const number|string 123 可以是这些类型中的任何值但是使用的时候需要小心 let virable: number | string 123function getData(id: numb…

金山WPS下的word,如何删除表格下面的大段空白

在csdn&#xff0c;你甚至可以学习到wps小技巧。 如题&#xff0c;这种大段空白怎么设置文本格式&#xff0c;表格格式都没用。正常的backspace删除也没用。 解决方式如下&#xff1a; 长按鼠标左键拖拽选中空白区域&#xff08;可能没有选中成功的特效没关系&#xff09;&am…

Golang - 使用CentOS 7 安装Golang环境

文章目录 操作步骤 操作步骤 为在CentOS 7上安装Go语言环境&#xff0c;可以按照以下步骤进行操作&#xff1a; 下载Go语言包&#xff1a; 从官方网站 https://golang.org/dl/ 下载适用于Linux的Go语言包。 解压缩Go语言包&#xff1a; 使用以下命令解压缩下载的Go语言包 […

洛谷 P6546 [COCI2010-2011#2] PUŽ

讲解&#xff1a; 首先还是正常输入&#xff1a; int a,b,v; cin>>a>>b>>v; 然后经入一个函数num&#xff1a; cout<<num(1.0*(v-a),(a-b))1<<endl; 之所以要乘以1.0是因为要向上取整&#xff01;而这个num函数的两个参数则是“蜗牛白天爬了多…

Asymmetric Temperature Scaling(NeurIPS 2022)论文速读

paper&#xff1a;Asymmetric Temperature Scaling Makes Larger Networks Teach Well Again official implementation&#xff1a;https://gitee.com/mindspore/models/tree/master/research/cv/ats 本文的创新点 在知识蒸馏中&#xff0c;一个奇怪的现象是大的教师模型未必…

网络原理(5)--HTTPS是如何进行加密的

&#x1f495;"Echo"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;网络原理(5)–HTTPS是如何进行加密的 在网络原理(4)中介绍了HTTP协议的相关内容,HTTP协议在传输的过程中存在着安全问题,实际上现在的网络中基本不再使用HTTP,而是使用一种更加安…

记录setData报错TypeError: [object Array] is not a function

小程序调用setData控制台显示报错.但是功能正常 同样的各个地方调setData都报错,经过一轮排除法后发现是自定义组件写法有问题 修改正确之后就没问题了

穷人沉迷多巴胺,富人追求内啡肽

奶头乐理论 1995年&#xff0c;美国旧金山召开了一场由500位富豪和政治家组成的精英会议。 会议认为&#xff0c;全球化的发展将使贫富差距迅速拉大、阶层矛盾日益激烈。 如何让穷人安分守己&#xff1f;他们想出了一个办法&#xff1a; 只需要像喂婴儿奶嘴一样&#xff0c…

服务运行时动态挂载JavaAgent和插件——Sermant热插拔能力解析

作者&#xff1a;华为云高级软件工程师 栾文飞 一、概述 Sermant是基于Java字节码增强技术的无代理服务网格&#xff0c;其利用Java字节码增强技术&#xff0c;为宿主应用程序提供服务治理功能&#xff0c;以解决大规模微服务场景中的服务治理问题&#xff0c;通过Java字节码…

uniapp H5唤起手机App 中间下载页

我这里直接是打开中间下载页&#xff0c;在下载页判断手机是否已存在App&#xff0c;有则唤起App&#xff0c;没有则可点击下载按钮下载app。 唤起App的关键语句是&#xff1a;window.location.href scheme Scheme链接格式样式&#xff1a; [scheme]://[host]/[path]?[que…

Backend - Django SimpleUI(美化 Django Admin )

目录 一、作用 二、安装 & 配置 &#xff08;一&#xff09;安装依赖 &#xff08;二&#xff09;配置 &#xff08;三&#xff09;运行 三、基础设定 &#xff08;一&#xff09;创建用户 &#xff08;二&#xff09;设置标题 &#xff08;三&#xff09;设置登录…

算法刷题:找到字符串中所有的字母异位词

找到字符串中所有的字母异位词 .题目链接题目详情题目解析算法原理滑动窗口流程图定义指针及变量进窗口判断出窗口更新结果 我的答案 . 题目链接 找到字符串中所有的字母异位词 题目详情 题目解析 所谓的异位词,就是一个单词中的字母,打乱顺序,重新排列得到的单词 如:abc-&g…

爬虫入门一

文章目录 一、什么是爬虫&#xff1f;二、爬虫基本流程三、requests模块介绍四、requests模块发送Get请求五、Get请求携带参数六、携带请求头七、发送post请求八、携带cookie方式一&#xff1a;放在请求头中方式二&#xff1a;放在cookie参数中 九、post请求携带参数十、模拟登…

使用IDEA配置GO的开发环境备忘录

1. 安装GO 1.1 下载&安装 进入GO的官网下载对应的GO&#xff0c;本人环境为mac选择最新的1.22.0版本&#xff0c;在本地安装即可 1.2 配置相关环境变量 修改~/.bash_profile&#xff0c;添加如下的配置 GOPATH/Users/kevin/go/src GOBIN/Users/kevin/go/go/bin GOROOT/…

【Redis快速入门】深入解读哨兵模式

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…