hdu 1074 (状压dp)
题意:
给出几个学科的作业、每个作业剩余的时间、完成每个学科作业的时间、如果在剩余时间内不能完成相应作业 就要扣分 延迟一天扣一分 求最小扣分
解析:
把这些作业进行全排列 求出最小扣分即可
但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)的更多相关文章
- 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 ...
- Doing Homework(HDU 1074状压dp)
题意:给你n个要做的作业,它们的名字.期限.可完成所需天数(必须连续)在规定期限不能完成要扣分(每天一分)求做作业顺序使扣分最少. 分析:作业数量较少,用状态压缩,做到第i种作业花费的天数dp[i]. ...
- D - Doing Homework HDU - 1074 (状压dp)
题目链接:https://cn.vjudge.net/contest/68966#problem/D 具体思路:我们可以把每个情况都枚举出来,然后用递归的形式求出最终的情况. 比如说 我们要求 10 ...
- HDU 1074状压DP
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 4778 状压DP
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
- HDU 3001 状压DP
有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路 成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...
- hdu 2809(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...
- hdu 2167(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...
- Engineer Assignment HDU - 6006 状压dp
http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...
随机推荐
- php利用自定义key,对数据加解密的方法
客户端和服务端通信时,有个场景很常见,通过一个id作为url参数来回传递.假设现在业务上只有这个id标识,那么需要稍微安全一点的通信,对这个id进行加密传输,到服务端再进行解密.这里需要一个服务端进行 ...
- PHP实现栈数据结构
利用php面向对象思想,栈的属性有top.最大存储数.和存储容器(这里利用了php数组). 代码如下:实现了入栈.出栈.遍历栈的几个方法: <?php class Stack{ const MA ...
- 随机指定范围内N个不重复的数
此为工具类,支持抽奖业务需求,具体实现见下方代码: package com.org.test; import java.util.ArrayList; import java.util.List; p ...
- BZOJ4816 SDOI2017 数字表格 莫比乌斯反演
传送门 做莫比乌斯反演题显著提高了我的\(\LaTeX\)水平 推式子(默认\(N \leq M\),分数下取整,会省略大部分过程) \(\begin{align*} \prod\limits_{i= ...
- webpack 构建 node_modules 中公司内部组件
构建 node_modules 中特定的组件 { test:/\.js$/, exclude: /node_modules\/(?!(zt-)\/).*/, use:[ { loader:" ...
- Vue 开发环境搭建 (Mac)
一.初识 由于个人工作原因以及技术需要一个提升,略晚的开始初探Vue ~.~ 二.那么Vue是什么呢? 他就是一个前端的框架,特点是数据双向绑定.组件化. 三.推荐开发环境 四.环境安装 打开终端运行 ...
- LOJ #6074. 「2017 山东一轮集训 Day6」子序列
#6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j. ...
- Opencv 2.4.10 +VS2010 项目配置
资料来源:http://blog.csdn.net/scottly1/article/details/40978625
- 关于树莓派HDMI转VGA线接显示器黑屏
经过数种折腾,找到了解决方法,在SD卡内有个config.txt文件,在其中找到“#hdmi_safe=1”,把#消除掉,变更后成为 # uncomment if you get no picture ...
- Linux下批量ping某个网段ip的脚本
比如现在需要对172.16.50.0/24网段的ip进行检查,检查哪些ip现在被占用,哪些ip没有被占用,可以通过ping命令来检查,脚本如下: [root@uatdns01 opt]# vim /o ...