题意:

就是有0-15个工作,每个工作有完成日期限制,还有完成这个工作所需要时间,求完成所有工作花时最少,并且输出这些顺序。。。

因为工作很小,最多也就1<<15种方案,BFS枚举所有方案即可。

View Code

/*
鐘舵€佸帇缂?+ 鎼滅储
*/#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<algorithm>
using namespace std;struct node
{char name[110];int end;int day;
}Work[20];int N;
struct Qnode
{int cost; //鏈€灏戞崯澶卞垎鏁?int v;//鍓嶇姸鎬佸€?int work; //宸ヤ綔澶╂暟char s[20];
}dp[40000];void bfs(  )
{queue<Qnode>q;int state, cost, day;Qnode xx, yy;xx.cost = xx.v = xx.work = 0;xx.s[0] = '\0';dp[0] = xx;q.push(xx);while( !q.empty() ){xx = q.front( );state = xx.v;cost = xx.cost;day = xx.work;q.pop( );for( int i = 0; i < N; i++){if( ((1<<i)&state) == 0 ) //濡傛灉璇ヨ鏈闂?
       {yy.v = (1<<i)|state;yy.work = day + Work[i].day;yy.cost = cost;if( yy.work > Work[i].end )yy.cost += yy.work - Work[i].end;if( dp[yy.v].cost == -1 || dp[yy.v].cost > yy.cost ){strcpy(yy.s, xx.s);int len = strlen(yy.s);yy.s[len] = i + '0';yy.s[len+1] = '\0';dp[yy.v] = yy;q.push(yy);}}}}
}int main( )
{int T;scanf("%d",&T);while(T--){memset(dp, 0, sizeof(dp));scanf("%d",&N);for( int i = 0; i < N; i++){scanf("%s%d%d",Work[i].name, &Work[i].end, &Work[i].day);}for( int i = 0; i < (1<<N); i++)dp[i].cost = -1;bfs( );printf("%d\n", dp[(1<<N)-1].cost);for( int i = 0; i < N; i++)printf("%s\n", Work[dp[(1<<N)-1].s[i] - '0'].name);}return 0;
}

转载于:https://www.cnblogs.com/tangcong/archive/2012/08/05/2623633.html

HDU 1074 Doing Homework 状态压缩 + 搜索相关推荐

  1. HDU 1074 Doing Homework【状态压缩DP】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...

  2. hdu 3681(bfs+dfs+状态压缩)

    解题思路:这道题属于图上来回走的问题,可以把重复走的过程弱化,即只强调从u->v的结果,中间经过的节点都不考虑.这道题里面'G','F','Y'是重要的节点,其余的点我们是可以忽略的,也就是说, ...

  3. HDU 4407 Sum(容斥原理+状态压缩)

    题目链接 容斥原理不会,map不会,状态压缩不会.做毛线... 题目大意:给出1-n,n个数,有两个操作1是询问x-y区间上与p互质的数的和是多少,2是改变x位置上的数为c. 自己确实办不了,map这 ...

  4. HDU 4332 Constructing Chimney [状态压缩+矩阵]

    烟囱是一个3*3的中空构造,给定烟囱的高度,问用1*1*2的砖头搭成这个烟囱有多少种方法. 首先用一个8位二进制数表示某一层的状态.枚举上下两层的状态,判断这两个状态是否可以相邻,上一层必须将下层填满 ...

  5. HDU 1885 Key Task 国家压缩+搜索

    点击打开链接 Key Task Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. [HDU 4842]--过河(dp+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4842 过河 Time Limit: 3000/1000 MS (Java/Others)    Mem ...

  7. HDU 4997 Biconnected (状态压缩DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4997 题意:一个n个点的完全图中去掉一些边.求这个图有多少个子图是边双联通的.(就是去掉任意一条边之后 ...

  8. 蓝桥杯算法训练 无聊的逗(状态压缩搜索)

    试题 提交此题   评测记录 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n ...

  9. HDU - 6749 Mosquito(二分+状态压缩+最大流)

    题目链接:点击查看 题目大意:给出一个 n * m 的房间,再给出 k 个蚊子窝(保证蚊子窝在边界上),每个蚊子窝内有数只蚊子,单位时间内蚊子可以移动一个单位的曼哈顿距离,蚊子们都是非常聪明的,问最少 ...

  10. HDU 4921 Map(状态压缩)

    题意看这篇博客. 思路参考的这篇博客. 补充:面对这种问题有一个常见的套路.比如计算若干个区间对答案的贡献这种问题,直接暴力可能复杂度到O(n ^ 2), 而我们可以计算出每个元素在多少个合法区间中, ...

最新文章

  1. 安装图形界面、VNCserver
  2. Entity Framework 学习结束语
  3. Elasticsearch相关软件安装
  4. JDK 9 –给圣诞老人的信?
  5. 【方便自己使用】KKT条件
  6. SSH下know_hosts的作用(转)
  7. 前后端交互之封装Ajax+SpringMVC源码分析
  8. UIImagePickerController拍照与摄像(转)
  9. C语言中malloc,calloc,realloc,free的语法与作用
  10. 程序员利用Python定时抓取微博评论
  11. 【计算机组成原理】1.计算机系统概述
  12. 想让你的Mac桌面清爽整洁?试试Mac临时文件存储小助手Yoink
  13. 美团O2O广告营销中的机器学习技术
  14. 狂神Mybatis入门
  15. git修改密码,IDE修改git密码
  16. mysql冷热分离的技术_冷热数据分离思路
  17. 人工智能程序可1秒检测出肠癌 准确率86% | 医疗
  18. jmeter文件上传压测file upload-数据为空-Connection terminated parsing multipart data
  19. 《三国志》历代记(1)
  20. 给安卓开发小白们的unit test指南 - 这也能测?这也要测?

热门文章

  1. LVM详解;Linux逻辑卷管理
  2. Python-字典遍历
  3. 抽象、多样性与可变性
  4. 2015年Java开发岗位面试题归类
  5. ubuntu mysql远程连接
  6. JS拖动技术--- 关于setCapture (转自 剑胆琴心-.Net学习笔记)
  7. java web 开发环境布置学习笔记1
  8. au6258引脚图及功能_电解电容引脚图/封装
  9. 在APP中结束第三方应用程序进程,kill第三方进程的方法
  10. c语言用三目运算符从小到大排列,错题集