题意:

给出几个学科的作业、每个作业剩余的时间、完成每个学科作业的时间、如果在剩余时间内不能完成相应作业 就要扣分 延迟一天扣一分 求最小扣分

解析:

把这些作业进行全排列  求出最小扣分即可

但A(15,15) 情况这么多  自然要想到状态压缩  1表示已经做完  0表示还没有做

用dp存储最小扣分   pre存储得到最小分的路径 (即做作业的顺序)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner; public class Main{
final static int maxn = 1<<16;
final static int INF = 0xfffffff;
public static int n;
public static class node{
String name = new String();
int d,c;
node(String name, int d, int c)
{
this.name = name;
this.d = d;
this.c = c;
}
}
public static ArrayList<node> list = new ArrayList<>();
public static int[] pre = new int[maxn];
public static void print(int step) //输出函数 类似 bfs最短路输出路径
{
if(step == 0)
return;
int t = 0;
for(int i=0;i<n;i++)
{
if((step & (1<<i)) != 0 && (pre[step] & (1<<i)) == 0)
{
t = i;
break;
}
}
print(pre[step]);
System.out.println(list.get(t).name);
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int cnt = 0;
int T = cin.nextInt();
while(T-- != 0)
{
list.clear();
int[] dp = new int[maxn];
Arrays.fill(pre, 0);
n = cin.nextInt();
for(int i=0;i<n;i++)
{
String name = cin.next();
int d = cin.nextInt();
int c = cin.nextInt();
list.add(new node(name,d,c));
}
Arrays.fill(dp, INF);
dp[0] = 0;
for(int i=0;i < 1<<n;i++) //已经做完的作业
{
for(int j=0;j<n;j++) // 即将要做的作业
{
if((i & (1<<j)) != 0) continue;
int s = 0;
for(int k=0;k<n;k++) //求出已经做完的作业的所耗费的时间
{
if((i & (1<<k)) != 0)
{
s += list.get(k).c;
}
}
if(s + list.get(j).c > list.get(j).d) //求出即将要做的作业是否超时
s = s + list.get(j).c - list.get(j).d;
else
s = 0;
if(dp[i|(1<<j)] > dp[i] + s)
{
dp[i|(1<<j)] = dp[i] + s;
pre[i|(1<<j)] = i;
}
}
}
System.out.println(dp[(1<<n)-1]);
print((1<<n)-1); } }
}

hdu 1074 (状压dp)的更多相关文章

  1. Doing Homework HDU - 1074 (状压dp)

    Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every ...

  2. Doing Homework(HDU 1074状压dp)

    题意:给你n个要做的作业,它们的名字.期限.可完成所需天数(必须连续)在规定期限不能完成要扣分(每天一分)求做作业顺序使扣分最少. 分析:作业数量较少,用状态压缩,做到第i种作业花费的天数dp[i]. ...

  3. D - Doing Homework HDU - 1074 (状压dp)

    题目链接:https://cn.vjudge.net/contest/68966#problem/D 具体思路:我们可以把每个情况都枚举出来,然后用递归的形式求出最终的情况. 比如说 我们要求  10 ...

  4. HDU 1074状压DP

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  6. HDU 3001 状压DP

    有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路  成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...

  7. hdu 2809(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...

  8. hdu 2167(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...

  9. Engineer Assignment HDU - 6006 状压dp

    http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...

随机推荐

  1. golang 转换markdown文件为html

    使用blackfriday go get -u gopkg.in/russross/blackfriday.v2 go: package markdown import ( "fmt&quo ...

  2. 【博客大赛】使用LM2677制作的3V至24V数控可调恒压源

    [博客大赛]使用LM2677制作的3V至24V数控可调恒压源   http://bbs.ednchina.com/BLOG_ARTICLE_3013105.HTM LM2677,是TI公司生产的高效率 ...

  3. Linux集锦

    一:Linux文件系统 Linux系统有一个重要概念:一切都都式文件. Linux支持五种文件类型: Linux的目录结构如下: 常见目录说明: /bin: 存放二进制可执行文件(ls,cat,mkd ...

  4. 【强化学习】python 实现 q-learning 迷宫通用模板

    本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10145797.html 0.说明 这里提供了二维迷宫问题的一个比较通用的模板,拿到后需要修改 ...

  5. 最全的前端Git基础命令,看完保证你会!

    常见信息 master: 默认开发分支 origin:默认远程版本库 Head: 默认开发分支 Head^:Head 的父提交 创建新仓库 git init git init [project-nam ...

  6. .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

    前言 上篇<.net core实践系列之短信服务-架构设计>介绍了我对短信服务的架构设计,同时针对场景解析了我的设计理念.本篇继续讲解Api服务的实现过程. 源码地址:https://gi ...

  7. Linq 之 Select 和 where 的用法

    最近开始学习linq.自己也总结一下,方便以后查阅. Select 同 Sql 中的 select 类似,即输出我们要的东东,感觉在 linq 中更加强大. Linq 可以对集合如数组.泛型等操作,这 ...

  8. zabbix中配置当memory剩余不足20%时触发报警

    在zabbix中默认当内存剩余量不足2G的时候触发报警,并没有使用百分比来触发如下: 现在需要配置:当memory剩余不足20%时触发报警,具体操作方法如下: 1)创建itemConfiguratio ...

  9. Week2 代码复查

    代码复查 http://blog.fogcreek.com/increase-defect-detection-with-our-code-review-checklist-example/ 这篇博客 ...

  10. Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题

    http://1000hz.github.io/bootstrap-validator/#validator-usage Validated fields By default, the valida ...