Doing Homework hdu1074(状压dp)

内容审核与文本安全技术综述:检测、过滤与对齐 检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。 阅读详情

Doing Homework

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.

Input 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.
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.
Sample Input
2
3
Computer 3 3
English 20 1
Math 3 2
3
Computer 3 3
English 6 3
Math 6 3
Sample Output
2
Computer
Math
English
3
Computer
English
Math


        
  
Hint
In the second test case, both Computer->English->Math and Computer->Math->English leads to reduce 3 points, but the 
word "English" appears earlier than the word "Math", so we choose the first order. That is so-called alphabet order.

        
 

很好的一个状压dp题目最多15种作业,用二进制压缩表示,枚举1-(1<<n)-1每种状态,每次dp更新的时候就想最短路一样,

先从小到大枚举找到这种状态里没有做的那个作业,加上这个作业计算减的分数,如果可以是减得分数变小就更新同时用一个pre数组记录下它的之前状态即新状态有之前那个状态转移而来,最后递归输出,因为题目给出的作业名字是按字典序递增顺序给出的,所以我们从小到大枚举可以保证字典序最小,具体看代码

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 16;
const int INF = 0x3f3f3f3f;
struct node{
    char name[110];
    int D,C;
}h[MAXN];
int dp[1<<MAXN];
int pre[1<<MAXN];
int n;
void output(int state){
    if(state == 0) return;
    int t = 0;
    for(int i = 0; i < n; i++){
        if((state & (1<<i)) != 0 && (pre[state] & (1<<i)) == 0){//找到那个当前状态有,它的前一个状态没有的作业
            t = i;//说明这个作业是这一次做的,并且题目告诉我们给的作业名字按字母增序给出,所以我们从0-n枚举一定能保证字典序最小
            break;
        }
    }
    output(pre[state]);
    printf("%s\n",h[t].name);//回溯的时候输出,因为是倒着往前找,然后正向输出
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        for(int i = 0; i < n; i++){
            scanf("%s%d%d",h[i].name,&h[i].D,&h[i].C);
        }
        for(int i = 0; i < (1<<n); i++){
            dp[i] = INF;
        }
        dp[0] = 0;
        for(int i = 0; i < (1<<n); i++){
            for(int j = 0; j < n; j++){
                if(i & (1<<j)) continue;//如果这个已经做了,跳过
                int s = 0;//用于计算减的分数
                for(int k = 0; k < n; k++){
                    if(i & (1<<k))
                        s += h[k].C;
                }
                s += h[j].C;//加上新加的状态
                if(s > h[j].D) s -= h[j].D;//加上这个状态后需要天数大于deadline,相减便是减的分数
                else s = 0;//否则减分为0
                if(dp[i|(1<<j)] > dp[i]+s){
                    dp[i|(1<<j)] = dp[i] + s;//更新状态
                    pre[i|(1<<j)] = i;//记录下新状态的前一个状态
                }
            }
        }
        printf("%d\n",dp[(1<<n)-1]);
        output((1<<n)-1);
    }
    return 0;
}


SAP BW/4HANA 项目字段级数据血缘分析的方法与工具 利用SAP自带工具可以在一定程度上查看数据流和字段使用情况,但往往需要人工逐步深挖。适用于简单场景或验证单个字段的映射。借助SAP数据治理解决方案(如 Information Steward、Data Intelligence 等)能够自动整合元数据,提供图形化、跨系统的血缘分析,适合对数据 lineage 有严格要求的企业级项目。第三方工具则提供了灵活强大的功能,如自动文档、生成功能丰富的报告,对于复杂环境下的血缘分析和影响分析非常有帮助。自行开发SQL/CDS脚本。 阅读详情

相关推荐

局部,全局(外部),static等变量详解

首先,必须明白一个程序是包含若干个源文件,每个源文件又是包含若干个函数,每个源文件、函数中又定义了若干个变量。但是每个变量都有自己的作用范围,也就是自己的作用域。只有在作用域内才可以访问变量。 变量的有效范围称为变量的作用域( scope)。归纳起来,变量有4种不同的作用域:文件作用域( file scope)、函数作用域( function scope)、块作用域(block sc...

归根结底不优秀的博客 1322

hdu 1074 doing homework

状态压缩dp 首先进行状态映射,(状态压缩),一共有15门课,每门课则可用一个数字位 来表示这门课作业是否已经做完,比如3门课 001,表示完成了第一门课作业,101,表示完成了第1门,第 3门作业。 则需要一个0-15位整数范围的数来表示所有状态 初始状态000, 结束状态1111…11 表示完成了所有作业。 再找状态转移方程 对于状态i, 这个状态可能由前一个状态pre,加上做完一道作

the_conquer_zzy的专栏 317

CLCD土地覆盖数据在ArcGIS中的实战应用:从导入到空间分析的完整指南

本文详细介绍了CLCD土地覆盖数据在ArcGIS中的实战应用,从数据导入到空间分析的完整流程。涵盖坐标系转换、数据质量检查、土地利用变化检测等核心技术,并分享城市扩张模拟和跨数据集融合等高级应用技巧,帮助研究者高效利用这一权威数据集进行环境监测和城市规划。

weixin_29292535的博客 589

状压dp,HDU1074.Doing Homework

比较典型的状压dp问题

EQUINOX1的博客 824

Windows防火墙服务异常修复指南:0x80070422与0x6D9报错实战处理

本文针对Windows防火墙服务异常导致的0x80070422与0x6D9报错,提供了从基础到进阶的实战修复指南。核心是通过services.msc服务管理器检查并修复Windows Firewall服务,包括设置启动类型、检查依赖服务等关键步骤。同时介绍了当基础方法失效时,如何使用命令行工具、系统文件检查器(SFC/DISM)以及排查组策略与第三方软件冲突等深度解决方案,帮助用户彻底解决防火墙服务无法启动或访问的问题。

m9n0o的博客 542

深入解析USB3.0一致性测试的关键技术与实践指南

本文深入解析了USB3.0一致性测试的核心技术与实践指南。文章阐述了测试如何确保设备在5Gbps高速传输下的信号完整性、电源管理合规性及协议兼容性,并提供了从测试系统搭建到完整流程执行的实战经验,帮助工程师有效应对高速信号、电源与兼容性三大核心挑战。

weixin_29164091的博客 277

HDU 1074 Doing Homework 【状压DP】

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1074 ★自己立的flag 非要选择学打牌 ,那么就从状压DP开始吧~ 题意: 给你n个作业(名字,提交截止日期,需要写的时间),每个作业超过预定时间提交,每多一天就要扣一分。问怎样安排写作业的顺序才能使扣的分最少,并按输出写的作业的顺序~ 思路: 首先看到n特别小,然后emmm,就是状压DP咯 其实...

HungTeen的博客 246

新手避坑指南:从GEO数据库下载单细胞测序数据的5个关键步骤(附实操截图)

本文为单细胞测序数据下载新手提供5个关键避坑步骤,涵盖数据搜索准备、样本量评估、文件选择决策、元数据诊断及高效下载技术。通过实操截图和代码示例,帮助研究者快速锁定GEO数据库中的优质单细胞测序数据,避免常见错误。

weixin_30296405的博客 656

HDU 1074 Doing Homework (状压dp)

题意:有nnn门课,给出课的名称,ddl,所需时间,然后要让超出ddl的时间数之和最小。 题解:状压dp 用二进制枚举所有状态,再遍历当前状态的所有子状态(1),倒推过去取最大就可以。见代码注释。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<cstring&g...

gongyuandaye的博客 351

uniapp运行钉钉小程序

因项目原因,公司需要在钉钉里面开发小程序。之前用uniapp开发过app,H5,小程序。还真没尝试过钉钉小程序,今天就简单的记录下uniapp运行钉钉小程序中的过程。

YL 2919

Coze工作流的代码无法安装第三方模块(依赖)怎么办?(如何解决Coze工作流代码缺少模块(依赖)的问题)

Coze工作流的代码无法安装第三方模块(依赖)怎么办?(如何解决Coze工作流代码缺少模块(依赖)的问题)

XiaoqiangClub的博客 4364

HDU 1074 Doing Homework(状压DP)

题目地址:HDU 1074 这题攒了好长时间了。。。一直没写。。 简单状压DP。这题比较特别的地方是dp需要用结构体数组。 详细的请看kuangbin大神的模板。。传送门 代码如下: #include #include #include #include #include #include #include #include #include #include #in

scf0920 1172

YOLOv11 改进 - SPPF模块 | 发论文神器!LSKA注意力改进SPPF,增强多尺度特征提取能力,高效涨点!!!

本文介绍了Large Separable Kernel Attention (LSKA)模块及其在YOLOv11中的结合应用。LSKA旨在解决Visual Attention Networks (VAN)使用大内核卷积时的计算效率问题,通过将2D深度卷积层的卷积核分解为级联的水平和垂直1-D卷积核,降低了计算复杂度和内存占用,且使VAN更关注物体形状。我们将集成LSKA的SPPF_LSKA模块引入YOLOv11,大量实验表明,改进后的模型在对象识别、检测、分割和稳健性测试上表现出色。

魔改工程师的博客 1279

HDU 1074 Doing Homework 状压Dp

题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/D 题意:给定各个科目的截至时间和完成该科目所需要的时间,求最小逾期值。 刚开始拿到该题目,不知道思路,百度才反应过来,科目为15明显是状压Dp的标志嘛。。。。 然后终于写出来了。。。好费劲啊。。。太弱了。。 代码: #include

catch_catch的专栏 685

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Doing Homework (状压dp hdu1074)

hdu 1074题目链接如上。题意是学生要完成作业,给出了n门课程,每门课程都有截止时间D和需要花费的时间C,如果一门课程超时一天就会扣一分。现在求一个最优安排,使得扣分最少,并且输出做作业的次序,如果同一扣分量有多种排序,要选择最符合字典序的优先级的。输入时已经按照字典序来给出课程。这道题目给的数据量很小,n的范围最大到15,我们可以从这个方面来推断它或许可以使用状压dp来解。并且还可以发现,当...

xuzonghao的博客 249

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

hdu 1074 Doing Homework 状压dp

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 有n门课程作业,每门作业的截止时间为D,需要花费的时间为C,若作业不能按时完成,每超期1天扣1分。 这n门作业按课程的字典序先后输入 问完成这n门作业至少要扣多少分,并输出扣分最少的做作业顺序 PS:达到扣分最少的方案有多种,请输出字...

126

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【状压dp】HDU 1074 Doing Homework

/* 状压dp D - Doing Homework 时间: 2017/02/20 题意:作业超过时限,超过一天扣一分,给出n个作业及其时限和需要完成的时间,求最小扣分值和其路径 题解: 状态压缩dp,本应该要想到的。其N<=15,所以每个状态状态转移最多15次。 因为题目要求最后方案如果多个情况以字典序排序,所以可以先将原数据先排序 然后我们发现递归时缺少了上一个状态的所用时间,我先预处理出来。

学无纸巾 378

HDU - 1074 Doing Homework 状压DP

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 th...

Prince_NYing的博客 257

【HDU-1074】Doing Homework (动态规划 状压DP)

Doing Homework Problem Description 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 Ign...

Winsoul Blog 1万+

HDU 1074 Doing Homework(状压DP)

第一次写博客ORZ…… http://acm.split.hdu.edu.cn/showproblem.php?pid=1074 http://acm.hdu.edu.cn/showproblem.php?pid=1074 这两个总有一个是可以点开的…… 题意比较清晰的啦。 做法的话暴力显然不合适,15!太大。 所以考虑状压DP…… 代码参考了网上大神的。十分感谢。谢谢@键盘上的舞者

cxhscst2 397

Doing Homework HDU - 1074 状压dp

题目链接:https://vjudge.net/problem/HDU-1074 转自:https://blog.youkuaiyun.com/qq_41925919/article/details/89372016 题意:有一些作业的截止时间和完成作业需要的时间,一门作业每超过截止时间一天就扣一分。求扣分最少且字典序最小的输出序列。输入按照字典序输入。 思路:要么贪心要么dp。 这道题是dp。因为n&l...

A 191

HDU 1074 Doing Homework(状压dp)

题意:给你n个作业的名称,完成时间和截止时间,问以怎样的顺序完成作用超出时间最少。 思路:这道题要用到状压dp,首先要明白什么情况会用到状压dp,当给出n数量很小时,并且每个都存在不同状况时会用到状压dp,用二进制字符串中0代表不选,1代表选 那么总共就有2^n种情况,此时我们就要枚举所有情况进行dp操作 #include&lt;bits/stdc++.h&gt; #include&lt;cstd...

- 回忆゛ 197

【解题报告】 HDU - 1074 Doing Homework(状压dp入门)

原题地址 题意 按照名字的字典序给出n门课程作业的截止时间和小明完成需要的时间,如果在超过截止时间之后完成作业则会罚时超出的时间,问怎样安排完成作业的顺序得到最小罚时,并按照字典序输出完成作业的顺序。 思路 这道题目其实一拿到就知道用贪心解决,每次完成截止时间最近的作业就行了,但是贪心可以得到正确的最小罚时,却无法保证完成作业的顺序的字典序最小。而这道题目的n的范围很小,所以想到状压dp,虽然可能...

Jiengup_的博客 339

Doing Homework HDU - 1074(状压dp)

题目链接:https://vjudge.net/problem/HDU-1074 n<=15,很明显是状压dp,令f[i][j]表示在状态i下最后一位是j的最小代价(状态i的第j位一定为1)f[i][j]一定是从状态(i-(1<<(k-1)))中转移过来的,至于上一个状态以谁结尾是最小值还需要判断,我是在更新当前状态时就判断一下那个最小,因为点的标号从1开始,那下标0的数组就没有...

qq_45288870的博客 188

HDU - 1074 Doing Homework 状压DP

题意: 给定n<=15个任务,每个任务给定名称(按照字典序排列),给定这个任务的截止时间跟花费的时间,如果过了截止时间还未完成,则过一分钟惩罚1,问惩罚的最小值。 分析: 因为n比较小,并且是让你安排一个排列,所以这就是经典的状压DP。 用S表示状态,二进制1代表做了这个任务,0表示没有做。 从而可以得出状态转移方程(如果当前状态 i 中包含了 j 这个子任务) 因为如果当前状态...

兜率工的博客 185

Doing Homework HDU-1074(状压DP)

Doing Homework HDU-1074 点击跳转↑ 题设:T组测试用例,每个样例下,第一行输入n(1<=n<=15)(需要完成的课程作业总数),接下来依次n行输入n个课程作业的名称,截止时间和消耗时间。 要求为:需写完所有的作业,完成一个作业需要消耗对应的时间,时间按累计处理单位为天,若超过截止时间,每超过一天完成会扣一分。 问:合理安排作业完成的顺序下的最少的扣分数,并输出这个情况下对应的作业完成顺序。(依次输出名称) 思路:n不大,且要最优处理,可用位运算暴力枚举各种情况来择优,即

自伤无色的博客 275
上一篇: Destruction of a Tree (dfs+思维)
下一篇: DNA sequence HDU - 1560 (IDA*)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值