hdoj1074--Doing Homework (DP 状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074
思路:
看着数据很小,15,但是完成的顺序有15!情况,这么大的数据是无法实现的。上网查才知道要用状态压缩,用二进制表示状态,比如n=3时:111表示3門全部完成,011表示完成第1,2門的状态,000表示一門都没完成的情况。这样压缩之后最多就只有1<<15种状态了,然后直接dp就可以了。大体思路是从1状态到(1<<n-)1依次遍历,寻找上一个状态,使得到达此状态时总扣分最小,寻找上一个状态时j从n-1开始到0倒着遍历,这样才能保证最终结果是字典序最小的,这里要仔细想一下,比如寻找111的上一个状态,若j=1和j=0对应的上一个状态同时使111这个状态的总扣分最小,因为输入的顺序即按字典序来的,所以j=1对应的作业字典序要大于j=0的,所以要让j=0对应的作业先于j=1的完成,所以应该选择j=1作为上一个状态,故应该倒着遍历。详见代码。
AC代码如下:
#include<bits/stdc++.h>
using namespace std; const int inf=0x3f3f3f3f;
struct course{
char name[];
int d,c;
}a[]; struct node{ //上一个状态,扣分值,总用时,该状态所做的作业编号
int pre,redu,cost,cou;
}dp[<<+]; int T,n,maxn; void print(int p){ //递归逆向输出
if(p){
print(dp[p].pre);
printf("%s\n",a[dp[p].cou].name);
}
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
maxn=<<n;
for(int i=;i<n;i++)
scanf("%s%d%d",a[i].name,&a[i].d,&a[i].c);
memset(dp,,sizeof(dp));
for(int i=;i<maxn;i++){
dp[i].redu=inf; //找最小的扣分,所以初始化为inf
for(int j=n-;j>=;j--){ //倒着遍历,为了结果字典序最小
int t=<<j;
if(i&t){
int tmp=i-t; //上一个状态
int tt=dp[tmp].cost+a[j].c-a[j].d;
if(tt<) tt=; //扣分值若小于0则置0
if(dp[tmp].redu+tt<dp[i].redu){
dp[i].redu=dp[tmp].redu+tt;
dp[i].pre=tmp;
dp[i].cost=dp[tmp].cost+a[j].c;
dp[i].cou=j;
}
}
}
}
printf("%d\n",dp[maxn-].redu);
print(maxn-);
}
return ;
}
hdoj1074--Doing Homework (DP 状态压缩)的更多相关文章
- HDU 1074 Doing Homework (dp+状态压缩)
题目链接 Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot ...
- HDU 1074 Doing Homework (dp+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一 ...
- HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)
题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...
- hdu_4352_XHXJ's LIS(数位DP+状态压缩)
题目连接:hdu_4352_XHXJ's LIS 题意:这题花大篇篇幅来介绍电子科大的一个传奇学姐,最后几句话才是题意,这题意思就是给你一个LL范围内的区间,问你在这个区间内最长递增子序列长度恰为K的 ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【bzoj1076】[SCOI2008]奖励关 期望dp+状态压缩dp
题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再 ...
- hdu4336 Card Collector(概率DP,状态压缩)
In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...
- dp状态压缩
dp状态压缩 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的就是那种状态很多,不容易用一般的方法表示的动态规划问题,这个就更加的难于把握了.难点在于以下几个方面:状 ...
- 洛谷 1052 dp 状态压缩
洛谷1052 dp 状态压缩 传送门 (https://www.luogu.org/problem/show?pid=1052#sub) 做完这道题之后,感觉涨了好多见识,以前做的好多状压题目都是将一 ...
随机推荐
- bzoj 1767: [Ceoi2009]harbingers
Description 给定一颗树,树中每个结点有一个邮递员,每个邮递员要沿着唯一的路径走向capital(1号结点),每到一个城市他可以有两种选择: 1.继续走到下个城市 2.让这个城市的邮递员替他 ...
- Spring IOC - 控制反转(依赖注入) - 懒加载机制
懒加载机制 Spring默认会在容器初始化的过程中,解析xml,并将单例的bean创建并保存到map中,这样的机制在bean比较少的时间问题不大,但一旦bean非常多时,Spring需要在启动的过程中 ...
- Java堆外内存之六:堆外内存溢出问题排查
一.堆外内存组成 通常JVM的参数我们会配置 -Xms 堆初始内存 -Xmx 堆最大内存 -XX:+UseG1GC/CMS 垃圾回收器 -XX:+DisableExplicitGC 禁止显示GC -X ...
- Linux 期中架构 SSH
为其他网络服务提供安全协议.替代Telnet SSH: 实现数据加密传输 22 默认支持root用户远程连接 类似sftp-server服务 nmap -p 22 10.0.0.41 nc 10 ...
- ROS的工作模式和ESXI网卡工作模式的关系
1.ROS网卡如果工作在桥接模式,那么ESXI网卡的工作模式必须设置为Promiscuous Mode(混杂模式)和Forged Transmits(伪传输)这两个必须都为开启状态,如下: 这种情况, ...
- 用PNG作为Texture创建Material
转自:http://aigo.iteye.com/blog/2279512 1,导入一张png素材作为Texture 2,新建一个Material,设置Blend Mode为Translucent,连 ...
- Linux 下的两种分层存储方案
背景介绍 随着固态存储技术 (SSD),SAS 技术的不断进步和普及,存储介质的种类更加多样,采用不同存储介质和接口的存储设备的性能出现了很大差异.SSD 相较于传统的机械硬盘,由于没有磁盘的机械转动 ...
- 【转载】全栈工程师-Hadoop, HBase, Hive, Spark
学习参考这篇文章: http://www.shareditor.com/blogshow/?blogId=96 机器学习.数据挖掘等各种大数据处理都离不开各种开源分布式系统, hadoop用于分布式存 ...
- 并发工具类(四)线程间的交换数据 Exchanger
前言 JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...
- javascript 常用获取页面宽高信息 API
在页面的构建中 常常会需要获取页面的一些宽高信息,例如实现 惰性加载图片 需要获取页面的可见区域高度 和 已滚动区域的高度,以判断图片所在位置是否可见来决定加载图片的时间, 花点时间整理了一下,获取页 ...