hdu1074 状压DP、栈实现记录路径
题意:给了几门学科作业、它们的截止提交期限(天数)、它们的需要完成的时间(天数),每项作业在截止日期后每拖延一天扣一学分,算最少扣的学分和其完成顺序。
一开始做的时候,只是听说过状态压缩这个神奇的东西,但事实上我并不会用它,所以白白想了一个晚上没想出来,然后就看了一下题解```再见吧朋友又是新的算法要学了。
状态压缩,实际上就是用二进制的方式,对于每一个要考察的状态用0/1表示其完成与否,这样当从 1 遍历到 111```111 的时候,就可以遍历完所有的状态了,在遍历的过程中利用位运算以及状态转移就能够最终实现DP。
首先对于每一个状态 i 初始化其罚分为最大值用于最开始的比较,用 & 运算来判断它的其中某项作业 j 是否已经完成,完成则 & 运算结果为 1 ,否则为 0 ,若已完成,那么考察 j 作业未完成的情况 last ,如果从 last 状态的罚分加上完成作业 j 后的罚分小于当前 i 状态的罚分,则更新 i 状态的罚分情况,并且记录下到 i 状态时做的作业 j 、 i 的上一状态 last 、i 状态的已花费时间,便于进行状态转移和记录路径。最后用栈从全部作业完成时 111`````111 的状态开始通过记录的上一状态往前递推,输出作业次序。
收获颇丰,但是心力交瘁```代码中间绿绿的是调试的时候用的```因为我蠢```
#include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>
#define INF 1<<30
using namespace std;
struct Sub{
char name[];
int d,t;
}S[]; struct dpl{
int t,s,p,n;
}dp[<<]; int main(){
int T;
while(scanf("%d",&T)!=EOF){
int N;
for(int q=;q<=T;q++){
scanf("%d",&N);
memset(dp,,sizeof(dp));
int i,j;
for(i=;i<=N;i++){
scanf("%s%d%d",S[i].name,&S[i].d,&S[i].t);
}
/* for(i=1;i<=N;i++){ printf("%s %d %d",S[i].name,S[i].d,S[i].t);
}*/
int sum=(<<N)-,sub,last,pun;
/* printf("%d ",sum);
while(sum){
printf("%d",sum&1);
sum>>=1;
}
printf("\n");*/
for(i=;i<=sum;i++){
dp[i].s=INF;
for(j=N;j>;j--){
sub=<<(j-);
if(i&sub){
last=i-sub;
pun=dp[last].t+S[j].t-S[j].d;
if(pun<)pun=;
if(pun+dp[last].s<dp[i].s){
dp[i].s=pun+dp[last].s;
dp[i].t=dp[last].t+S[j].t;
dp[i].p=last;
dp[i].n=j;
}
}
}
}
stack<int>s;
int t=sum;
printf("%d\n",dp[t].s);
while(t){
s.push(dp[t].n);
t=dp[t].p;
}
while(!s.empty()){
printf("%s\n",S[s.top()].name);
s.pop();
}
}
}
return ;
}
hdu1074 状压DP、栈实现记录路径的更多相关文章
- HDU 4539郑厂长系列故事――排兵布阵(状压DP)
HDU 4539 郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...
- Codeforces 453B Little Pony and Harmony Chest:状压dp【记录转移路径】
题目链接:http://codeforces.com/problemset/problem/453/B 题意: 给你一个长度为n的数列a,让你构造一个长度为n的数列b. 在保证b中任意两数gcd都为1 ...
- kuangbin专题十二 HDU1074 Doing Homework (状压dp)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU1074:Doing Homework(状压DP)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- CH0103最短Hamilton路径 & poj2288 Islands and Brigdes【状压DP】
虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位 \((n >> ...
- HDU1074 Doing Home Work - 状压dp
传送门 题目大意: 有n(\(\le 15\))个作业,每个作业有个name, deadline(截止日期),cost(做作业花的时间),如果没有按时完成某个作业,惩罚分数为超出的时间,求一个合理的顺 ...
- 最短Hamilton路径(状压dp)
最短Hamilton路径实际上就是状压dp,而且这是一道作为一个初学状压dp的我应该必做的题目 题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 ...
- 【状压dp】Hamiton路径
描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点 ...
- HDU 1074:Doing Homework(状压DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Problem Description Ignatius has just ...
随机推荐
- 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...
- [转]change the linux startup logo
1. Make sure that you have the kernel sources installed. As annoying as this may seem, you will need ...
- yeild
正在使用cpu的线程,退出,返回等待池,其他优先级相同的线程竞争上岗.
- 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException
1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException new Thread(new Runnable() { @Override publi ...
- 04-树5 Complete Binary Search Tree
这题也是第二次做,本想第一次做时参考的算法会和老师讲的一样,不想老师讲的算法用在这题感觉还不如思雪园友的算法(http://www.cnblogs.com/sixue/archive/2015/04. ...
- Linux下TC使用说明
Linux下TC使用说明 一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. ...
- Ubuntu 14.10 下CPU实时监控mpstat命令详解
简介 mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查 ...
- (转)Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解
原文:http://blog.csdn.net/lidew521/article/details/8655229 1.SQLite介绍:最大特点是,无数据类型;除了可以使用文件或SharedPrefe ...
- windows 命令修改IP
修改ip: netsh -c interface ip set address name="本地连接" source=static addr=192.168.11.100 mask ...
- flexible.js
关于rem小数点 flexible.js http://blog.163.com/hongshaoguoguo@126/blog/static/180469812015219101346170/ ht ...