hdu 1074 Doing Homework
http://acm.hdu.edu.cn/showproblem.php?pid=1074
状压dp不是很懂,看着别人的代码写的,很长时间才看懂。 dp[i]记录(1<<n)-1个状态第i状态的最小结果。用pre数组记录每一个状态的前驱。
用dfs输出路径。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 16 5 using namespace std; 6 const int inf=1<<29; 7 8 int dp[1<<16]; 9 int t,n; 10 int pre[1<<16]; 11 struct node 12 { 13 char name[110]; 14 int d; 15 int c; 16 }p[maxn*10]; 17 18 void dfs(int w) 19 { 20 if(w==0) return ; 21 int pos=0; 22 for(int i=0; i<n; i++) 23 { 24 if((w&(1<<i))!=0&&(pre[w]&(1<<i))==0) 25 { 26 pos=i; 27 break; 28 } 29 } 30 dfs(pre[w]); 31 printf("%s\n",p[pos].name); 32 } 33 34 int main() 35 { 36 scanf("%d",&t); 37 while(t--) 38 { 39 scanf("%d",&n); 40 for(int i=0; i<n; i++) 41 { 42 scanf("%s%d%d",p[i].name,&p[i].d,&p[i].c); 43 } 44 for(int i=0; i<(1<<n); i++) 45 { 46 dp[i]=inf; 47 } 48 dp[0]=0; 49 for(int i=0; i<(1<<n); i++) 50 { 51 for(int j=0; j<n; j++) 52 { 53 if(i&(1<<j)) continue; 54 int sum=0; 55 for(int k=0; k<n; k++) 56 { 57 if(i&(1<<k)) sum+=p[k].c; 58 } 59 sum+=p[j].c; 60 if(sum>p[j].d) sum-=p[j].d; 61 else sum=0; 62 if(dp[i|(1<<j)]>dp[i]+sum) 63 { 64 dp[i|(1<<j)]=dp[i]+sum; 65 pre[i|(1<<j)]=i; 66 } 67 } 68 } 69 printf("%d\n",dp[(1<<n)-1]); 70 dfs((1<<n)-1); 71 } 72 return 0; 73 }
View Code
转载于:https://www.cnblogs.com/fanminghui/p/4025249.html
hdu 1074 Doing Homework相关推荐
- HDU 1074 Doing Homework【状态压缩DP】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...
- Doing Homework HDU - 1074
Doing Homework HDU - 1074 题意: 有n个任务,每个任务有一个截止时间,超过截止时间一天,要扣一个分. 求如何安排任务,使得扣的分数最少. (1<=n<=15) 题 ...
- 动态规划训练16 [Doing Homework HDU - 1074 ]
Doing Homework HDU - 1074 这是一道状态压缩DP(从N <= 15就可以看出来). 我们定义二进制状态S代表的是目前已经安排好的任务 dp[S].val代表的是目前已经安 ...
- HDUOJ 1074 Doing Homework
HDUOJ 1074 Doing Homework 题目链接 Problem Description Ignatius has just come back school from the 30th ...
- hdu 1074 状压dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意:有n个作业,对于每一个作业有一个deadline,有一个完成这作业所需要的时间.如果超过d ...
- HDU 1789 Doing Homework again(馋)
意甲冠军 参加大ACM竞争是非常回落乔布斯 每一个工作都有截止日期 未完成必要的期限结束的期限内扣除相应的积分 求点扣除的最低数量 把全部作业按扣分大小从大到小排序 然后就贪阿 能完毕 ...
- hdu 1789 Doing Homework again
又是一次初始化惹的货!!! 超级水的贪心...害的我以为思路错误~~ ~ #include<iostream>#include<cstdio>#include<cmath ...
- HDU 1789 Doing Homework again (贪心)
http://blog.csdn.net/dgq8211/article/details/7538060 题目链接:Click here~~ 题意: 有 n 门作业,每门作业都有自己的截止期限,当超过 ...
- kuangbin带你飞专题合集
题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...
- 算法学习经典例题整理
陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...
最新文章
- asp.net的控件视图状态
- spring 动态数据源
- 使用LDAP保护Java EE6中的Web应用程序
- 《Linux网络接口》---------struct ifreq struct ifconf
- Lecture 21 Parallel Algorithms II
- [jQuery] 说说看jQuery的选择器有哪些?
- 15个优雅的Python编程技巧,掌握后瞬间玩转Python
- linux_iptables 详解
- 在ubuntu下打开.TXT文件,中文显示为乱码
- 动态规划01背包问题入门学习,详细笔记,推荐阅读
- 使用apt更新和升级系统软件
- [每日一氵]协方差矩阵计算
- VS-code输入感叹号没有提示
- docker学习(十三)docker安装dejavu
- 利用Windows11安卓子系统对APP进行渗透测试
- python字符串对象所有基本方法简要
- http请求过程(访问一个页面,发生了怎样的网络请求?)
- 停车场管理系统页面实现(1)登陆页面设计
- 还愁不能解密MD5值?简单代码就能实现md5加密解密,内附源码,亲测可用
- webView简单使用:网页中有电话,在客户端点击打电话(一)
热门文章
- 五、OpenStack安装Nova
- vs 2008 xp 试用版 升级办法
- 中国未来5年IP地址需求总量高达345亿
- 开源文本编辑器Vim的作者Bram Moolenaar推出了新的编程语言Zimbu.doc
- 网页显示mysql数据库到表格数据_在网页中如何将数据库的数据显示出来
- Unity中Json文件编写注意
- 一对多关联关系映射和设置级联属性
- 同济大学计算机保研名单,同济大学2021届保研率27.8%,主要保研本校、复交清国...
- layui 滚动加载与ajax,909422229_layUi关于ajax与loading问题
- 小度智能音箱维修点_进击的小钢炮!体验小度智能音箱大金刚