题意:

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

解析:

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

但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. 关于TerraBuilder的扩展开发

    熟悉Skyline的朋友,可能会发现,在最新的6.6的产品体系中,TerraBuilder中用于生成三维地形场景的模块,改成了TerrainBuilder. 通常情况下,这款软件模块,我们主要用它来进 ...

  2. Python文学家为Python写的一首词?(附中英文版)

    The Zen of Python, by Tim Peters (Python之禅 by Tim Peters) Beautiful is better than ugly. (优美胜于丑陋(Pyt ...

  3. sql新语句

    SQL语句查找重复数据的写法:  select partner_id,* from sale_origin where partner_id in (select   partner_id from  ...

  4. SQL Server-聚焦深入理解死锁以及避免死锁建议(转载)

    前言 终于进入死锁系列,前面也提到过我一直对隔离级别和死锁以及如何避免死锁等问题模棱两可,所以才鼓起了重新学习SQL Server系列的勇气,本节我们来讲讲SQL Server中的死锁,看到许多文章都 ...

  5. VM下设置CenOS为静态IP

    在本机利用VM启动了4台虚拟机来搭建zookeeper集群,但是每次电脑重启后,虚拟机的IP都会变化,现在想来固定每台虚拟机的IP. 1.Step1:查看网关和子网掩码 记住选用NAT模式,点击NAT ...

  6. EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET

    十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转 ...

  7. .NET日志记录之——log4net划重点篇

    .NET日志记录之--log4net划重点篇 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不 ...

  8. 【精】【入门篇】js正则表达式

    前言 最近有了点时间,就回头看了一下<学习正则表达式>这本书.怎么说呢,这本书适合从零开始学习正则表达式或者有一点基础但是想要加强这方面能力的读者.这本书的风格是“实践出真知”,使用归纳方 ...

  9. Linux服务器性能压力测试

    对于新采购的服务器,需要进行有必要的性能测试.这里选择UnixBench工具进行性能测试.记录如下: 1)安装使用下面的脚本使用了最新版UnixBench5.1.3来测试,注释了关于graphic的测 ...

  10. L2-027. 名人堂与代金券

    链接:名人堂与代金券 在比赛中这题只得了2分,赛后发现原来strcmp函数并不是只返回-1,0,1三种,而是返回正数负数0 但是在我的电脑上一般就是返回前三种,只是用后面的三种更稳妥点 都怪我基础不扎 ...