//hdu 1074 状态压缩dp
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<istream>
#include<vector>
#include<math.h>
#include<stack>
#include<algorithm>
#define mod 10000009
#define maxn 9999999999
#define long long ll
using namespace std;
struct Job
{
char name[205];
int time, dead;
};
struct Choose
{
int min, last,pre,now;
};
int main()
{
//freopen("d:\\in.txt", "r", stdin);
//freopen("d:\\inn.txt", "w", stdout);
int T;
scanf("%d", &T);
while (T--)
{
Choose ch[1 << 15 + 1];
Job job[16];
int t, i,all,j;
scanf("%d", &t);
all = (1 << t) - 1;
//printf("all=%d\n",all);
for (i = 1;i <= all;i++)
{
ch[i].pre = -1;
ch[i].min = 99999999999;
ch[i].last = 0;
ch[i].now = 0;
}
for (i = 1;i <= t;i++)
{
scanf("%s%d%d", job[i].name,&job[i].dead, &job[i].time);
int y=1<<(i-1),x=job[i].time-job[i].dead;
if(x<0)
x=0;
ch[y].min=x;
ch[y].last=job[i].time;
ch[y].now=i;
}
for (i = 1;i <= all;i++)
for (j = 0;j < t;j++)
{
int yy=1<<j;
//printf("i=%d yy=%d %d \n",i,yy,i&yy);
if ((i&yy)==0)
{
int ii, jj;
ii = ch[i].last + job[j + 1].time - job[j + 1].dead;
//printf("ch[%d].last=%d ii=%d \n",i,ch[i].last,ii);
if (ii < 0)
ii = 0;
jj = (1 << j) + i;
//printf("ch[%d].min=%d ii=%d + ch[i].min=%d = %d\n",jj,ch[jj].min,ii,ch[i].min,ii+ch[i].min);
if (ch[jj].min>ii+ch[i].min)
{
ch[jj].min = ii+ch[i].min;
ch[jj].last = job[j+1].time+ch[i].last;
//printf("ch[%d].last=%d job[%d].time=%d+ch[%d].last=%d\n",jj,ch[jj].last,j,job[j].time,i,ch[i].last);
ch[jj].pre = i;
ch[jj].now = j + 1;
}
}
} //注意搜索是是从小到大,不必要再考虑字典序的问题
printf("%d\n", ch[all].min);
stack<int> q;
i = all;
while (i!= -1)
{
q.push(ch[i].now);
i = ch[i].pre;
}
while (!q.empty())
{
int front = q.top();
q.pop();
printf("%s\n", job[front].name);
}
}
return 0;
}相关推荐
自动驾驶仿真(五)—— 基于Carsim、Prescan、Simulink的联合仿真
自动驾驶仿真五——基于Carsim、Prescan、Simulink的联合仿真1. 联合仿真流程2. CarSim联合仿真配置要点3. Prescan联合仿真配置要点4. Carsim、Prescan、Simulink联合仿真结果5. 参考学习的书目教材 博主前面的博文已经介绍了Carsim和Prescan各自与Matlab/Simulink的相关联合仿真应用实例,并且论述过几款软件各自的优势及用法,CarSim适合动力学模型的建立,PreScan适合行车场景的搭建,Simulink适合控制算法的设计及信号
HDU 1074 Doing Homework【状态压缩DP】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074题意:给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最终扣分最少?分析:最多只有15节课,可以将完成作业的情况进行状态压缩,用二进制表示,枚举出状态,进行dp。 然后注意要取字典序最小的。 dp最初忘记1<代码:#include<iostream> #inc
告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程
本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。
动态规划(状态压缩dp) --- HDU 1074 **
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4416 Accepted Submission(s): 1787 Problem Description Ignatius
Mediapipe手势识别实战——基于关节角度计算实现动态手势分类
本文详细介绍了如何利用Mediapipe进行手势识别,通过计算手指关节弯曲角度实现动态手势分类。文章从基础原理出发,讲解了关节角度计算的数学方法,并提供了Python实现代码。同时,还分享了数字手势和OK手势的识别实战经验,以及性能优化和工程实践中的关键技巧,帮助开发者快速掌握实时手势识别技术。
Moltbot 超详细安装使用教程(初学者版)
你在外面逛街,用微信/Telegram 发消息说"帮我查一下明天的天气"它立刻帮你查好并回复你说"帮我在电脑上新建一个文件夹叫'工作文档'"它真的帮你在电脑上创建了这就是 Moltbot ——一个能真正帮你干活的 AI 助手。API Key 就像是一把"钥匙",让 Moltbot 能够使用 AI 服务。
HDU 1074 状态压缩DP 作业扣分
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1074 Ignatius刚刚从第30届ACM / ICPC回到学校。 现在他做了很多功课。 每个老师给他一个交付作业的最后期限。 如果Ignatius在截止日期之后交作业,老师将减少他的最后考试成绩,1天1分。 正如你所知,做作业总是需要很长时间。 所以Ignatius希望你帮助他安排做作业的顺序,以减少
基于STM32与MPU6050的实时姿态检测系统设计与实现(源码+硬件解析)
本文详细介绍了基于STM32单片机与MPU6050传感器的实时姿态检测系统设计与实现。通过硬件解析、传感器校准、卡尔曼滤波算法和欧拉角计算,实现高精度姿态检测。提供完整源码和调试技巧,适用于无人机、平衡车等嵌入式开发项目,解决噪声干扰和数据漂移等常见问题。
hdu 1074 状态压缩dp
题意: 有n种不同的作业,每种作业有完成所需的时间以及截止上交的时间,每种作业超过截止时间上交会扣分,现在要你安排这n种作业的完成顺序使得总扣分最少。 分析: 由于n比较小最大只有15,那么我们就可以考虑使用状态压缩dp来完成,每种作业的一种完成方式是一个状态。 例如5,二进制位101,代表第一门和第三门完成了,第二门没有完成,那么我们可以枚举1~1 对于到达状态i,从何种状态
auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路
本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。
锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)
锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)
HDU 1074 Doing Homework(DP·状态压缩)
题意 有n个作业要做 给你每个作业的最后期限 和做完这个作业需要的时间 作业每超过最后期限一天就会扣一分 只能把一个作业做完了再做另一个作业 问做完所有作业至少扣多少分 作业最多只有15个 看到这个数字容易想到是状态压缩 dp[i]表示i对应状态的最小扣分 i转换为二进制后为1的位表明该位对应的作业已经做了 为0的位没做 那么dp[i] = min{dp[k] + c
基于ART算法和SIRT算法的超声CT反演及MATLAB代码实现
在超声CT中,反演算法起着至关重要的作用,它通过从测量数据中恢复出目标物体的内部结构。本文将介绍基于ART算法(Algebraic Reconstruction Technique)和SIRT算法(Simultaneous Iterative Reconstruction Technique)的超声CT反演方法,并提供相应的MATLAB代码实现。本文介绍了基于ART算法和SIRT算法的超声CT反演方法,并提供了相应的MATLAB代码示例。基于ART算法和SIRT算法的超声CT反演及MATLAB代码实现。
hdu1074 状态压缩dp
/**********************jibancanyang************************** *Author :jibancanyang *Created Time : 日 4/10 15:45:00 2016 *File Name : hdu1074.cpp *题目类型:状态压缩dp *感悟:看数据范围易猜测为2的指数次方复杂度,这
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
HDU 1074 状态压缩DP
/**************************************************************************************************** 状态压缩DP,乱搞搞出来的。。。用二进制位压缩状态,例如101表示第2,0个作业已经做了,第1个作业还没做的状态,那么 显然应该从100或者001推101,那么就用个&啊,^啊,算啊。。。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
HDU 1074 (状态压缩DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意:给出n(n 由数据规模可以知道可以用状态压缩DP来解决。一般的DP题目都可以用搜索和递推两种方法解决,这道题来说,递推思路会比较直观,而递推的时间效率高很多! 用搜索来解决,主要要注意两个地方,一是状态的转移,二是剪枝。由状态0开始进行DFS,每次添加一个当前还没有安排的
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
hdu1074之状态压缩dp
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4685 Accepted Submission(s): 1917 Problem Description Ignatius ha
HDU 1074 状态压缩dp
题意 :就是说有n门课程作业,每一门课程作业都有一个截止时间和完成作业所需要的时间,超出截止时间再交作业会被扣分,问你最少扣多少分。题解 :首先我们发现,作业的数目最大只有15,如果纯暴力的话,需要 15 ! 显然 时间复杂度不可以接受,这个时候就要想能不能状态压缩一下,把15!降到 2^15 * 15 这种复杂度,这样的话就不难想到状态压缩dp了 (可以思考一下,其实状态压缩的好处就在于它仅仅用
HDU 1074 Doing Homework DP 状态压缩
题意:有N(N<15)个作业要做,如果一门课的作业没做完,超过一天,就要罚一分。问:最少罚多少分?并输出做作业的先后顺序,如果有相同罚分的,输出字典序最小的。思路:状态压缩。用二进制表示做作业的状态:101表示第一科作业和第3科作业都做了的最少罚分,这个可以由100,001两个状态转移过来。 http://acm.hdu.edu.cn/showproblem.php?pid=1074 /****
hdu 1074 状态压缩DP 贪心 错的原因
第一次状态压缩DP,刚开始使用贪心策略,后来找到反例。 输入: 5 3 a 1 1 b 2 1 c 1 1 你的输出: 2 a c b 正确答案: 2 a b c 贪心能够算出正确的分数,但是不一定能得到正确的字典序。 因为贪心的时候根本没有考虑字典序。 但是如果遇到类似题目只要求最小扣分,那么一定要用贪心,因为这题只有15门课,如果课多枚举状态dp的话肯定不行,而贪心就快得多。因此
HDU 1074 Doing Homework 状态压缩DP
题目大意: 现在又n中不同的作业需要做,每种作业有一个上交期限可
hdu1074 状态压缩DP
有n门课,给定每门课要花费的天数C和时限D,如果超过规定时间完成,每超过一天就会扣1分,问怎样安排做作业的顺序才能使得所扣的分最小 N 枚举所有状态i(1 对于第j门课,if(i&(1 那么i可以由状态i^(1 !!注意题目要求字典序,所以状态转移方程要取等号 dp[i]>=dp[lastState]+delay这是因为j是从1->n的,所以是1 #include
HDU1074 Doing Homework 状态压缩DP
Doing HomeworkTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescriptionIgnatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every
状态压缩dp入门[HDU1074][HDU1065][POJ3254][POJ1185][HDU4359][POJ3311][POJ2411]
[HDU1074][HDU1065][POJ3254][POJ1185][HDU4359][POJ3311][POJ2411] 我理解的状态压缩dp问题是这样的: 给出你n个物品,你要在这n个物品中选出一些物品(或一个都不选),那么对于每个物品你都有两种选择(选或者不选),这样,一共有2^n种情况。而n 如:总共有5个物品,则最多有32种取物品的情况,13 对应5位的二进制数01101,就表示取物品2,3,5。对于每个5位的二进制数我们都用5次位运算判断它的各个位是1还是0。本来每个状态要用5个空间存,现在
1万+



被折叠的 条评论
为什么被折叠?



