题意:

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

解析:

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

但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. win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建

    win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建 重编译的优点:能够调试的时候看OpenCV的源码. 重编译要得到的东西:Debug版本号和Release版本号 ...

  2. 字符串中去除多余的空格保留一个(C#)

    在C#的字符串,其中有许多空格,现要求是把多余的空格去除保留一个.原理是使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries,然后再把分割后的字符串Join起来. st ...

  3. ubuntu在指定的文件夹下创建python3和python2的虚拟环境

    1.用pip安装virtualenv sudo apt-get install python-virtualenv 2.创建python2和python3虚拟环境 2.1 创建python2的虚拟环境 ...

  4. Asp.Net_ 服务端向客户端写JavaScript脚本

    在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...

  5. C/C++中连接函数strcat的应用(简单讲解)

    有位学弟问到我如何将两个字符连接起来,想想java/python里面可以直接用+连接起来,可是C/C++里面有没有这么方便的做法呢? 答案是有的,在C语言的string.h库中有个神奇的函数叫做str ...

  6. SpringMvc返回Json调试

    spring-web-5.0.6.RELEASE.jar!/org/springframework/web/method/support/HandlerMethodReturnValueHandler ...

  7. Linux运维笔记-日常操作命令总结(3)

    文本操作:sed sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. sed命令行格式为: sed [-nefri] ‘c ...

  8. kvm虚拟机日常操作命令梳理

    KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理.废话不多说,下面列出kvm日常管理中的命令 1)查看KVM虚拟机配置文件及运行状态 KVM虚拟机默认配置文件位置: /etc/libvirt ...

  9. css-preprocessors

    what ? 预处理器是css 能够使用 变量.操作符.函数.mixins.interpolations 等类似于js 功能的一种语言. 目前比较常用是三种:SASS.less .stylus . W ...

  10. ul ol li的序号编号样式

    序号样式例子,下面是html代码(做参考) <ol> <li>列表内容列表内容列表内容列表</li> <li>列表内容列表内容列表内容列表</li ...