hdu 1074(状态压缩dp+记录路径)
题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意已经说了家庭作业的名字是按照字典序从小到大输入的,所以处理起来就好多了。
分析:此题的关键是如何记录路径,具体看代码实现吧!
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; struct node{
char str[];
int dayline;
int cost;
}a[]; struct st{
int now,pre;//now代表当前状态,pre代表当前状态的前一个状态
int time;//当前时间
int score;//当前扣除的分数
int id;//当前刚做完的作业
}dp[]; int n; void solve()
{
int i,j,max=<<n,qian,temp,num=;
char res[][];
dp[].now=;
dp[].pre=;
dp[].time=;
dp[].score=;
dp[].id=;
for(i=;i<max;i++)
{
dp[i].score=;
for(j=;j<=n-;j++)
{
if(i&(<<j))
{
qian=i-(<<j);//由qian->i
if(dp[qian].time+a[j+].cost>a[j+].dayline)
temp=dp[qian].time+a[j+].cost-a[j+].dayline;
else
temp=;
//temp用来表示做了当前作业需要扣除的分数
if(dp[i].score>=dp[qian].score+temp)//这里要取等号,自己想下为什么?如果去掉,会出现生命结果
{
dp[i].score=dp[qian].score+temp;
dp[i].now=i;
dp[i].pre=qian;
dp[i].time=dp[qian].time+a[j+].cost;
dp[i].id=j+;
}
}
}
}
printf("%d\n",dp[max-].score);
int t=max-;
while(dp[t].now!=)//先把结果倒过来
{
strcpy(res[num++],a[dp[t].id].str);
t=dp[t].pre;
}
for(i=num-;i>=;i--)
printf("%s\n",res[i]);
} int main()
{
int T,i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
getchar();
for(i=;i<=n;i++)
{
scanf("%s",a[i].str);
scanf("%d",&a[i].dayline);
scanf("%d",&a[i].cost);
getchar();
}
solve();
}
return ;
}
hdu 1074(状态压缩dp+记录路径)的更多相关文章
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
- hdu1074 状态压缩dp+记录方案
题意: 给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路: 状态压缩dp,记录方案数的地方 ...
- HDU 3341 状态压缩DP+AC自动机
题目大意: 调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高 这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态 我最开始对于状态的保存是, ...
- hdu 4284 状态压缩dp
题意: 有N 个点的无向图,要去其中 h个地点做事,做事需要先办理护照,之后可以挣一定数量的钱,知道了一开始有的总钱数,和 一些城市之间 道路的花费,问可不可以在 指定的 h 个城 ...
- hdu 2167 状态压缩dp
/* 状态转移方程:dp[i][j]=Max(dp[i][j],dp[i-1][k]+sum[i][j]); */ #include<stdio.h> #include<string ...
- HDU 4640 状态压缩DP 未写完
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...
- hdu 1074 状态压缩
http://acm.hdu.edu.cn/showproblem.php?pid=1074 我们可以断定状态的终止态一定是n个数全部选完的情况,那么它的前一个状态是什么呢,一定是剔除任一门课程后的n ...
- HDU 4856 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...
- hdu 4539(状态压缩dp)
题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了. 分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两 ...
随机推荐
- mq_notify
NAME mq_notify - 通知进程可以接收一条消息 (REALTIME) SYNOPSIS #include <mqueue.h> int mq_notify(mqd_t mqde ...
- Hibernate笔记——第一个简单实例
1. 首先进行框架配置 导包 hibernate配置xml文件 ======================= 2. 创建并配置POJO类 Hibernate是操作持久化层的框架,和数据库打交道,其 ...
- windows xp 无法连接wpa无线网络
其实以前一直是可以的,不知为什么前几天忽然就不能加入原有的无线网了.我的无线网是WPA加密的,采用DHCP分配IP(但针对特定MAC地址分配静态IP). 在网上找了许久,有的网友认为应该把无线网卡(那 ...
- IME 编程相关
以下内容摘自http://msdn.microsoft.com/zh-cn/goglobal/bb688135.aspx 在 Win32 中处理输入语言的方法 Microsoft Developer ...
- MyBatis学习总结_18_MyBatis与Hibernate区别
也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hi ...
- O(1)时间内删除指定链表结点
题目 给定单链表头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点. 分析 对于上图实例链表(a)删除指针p有两种方式 思路1:(b)找到前一个指针pre,赋值pre->next = ...
- eclipse 中使用tomcat
最近写了个商品搜索模块,要做成tomcat服务,以前只关注算法,从来没有使用过tomcat,这次上网上查了些资料还搞定(小公司真是锻炼人啊,以前我从来不考虑这些服务问题). 1.tomcat 环境的搭 ...
- (5)XML转化成TXT
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- STL容器的遍历删除
STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...
- ADB安装应用报错 Segmentation fault pm install /data...
路径一定不能有中文…… 路径一定不能有中文…… 路径一定不能有中文…… 路径一定不能有中文…… 路径一定不能有中文……