hdu 1074 Doing Homework 状压dp
2015-07-19 22:05
316 查看
题意:给出n门课作业的deadline和完成所需时间,没门课超deadline一天扣一分,求出一种方案使得被扣的分最少。
n=15,所以枚举每种课上与不上的状态,dp【i】则表示i这种情况下(例如3表示只有第一第二门课完成)被扣最少的分。dp【i】中肯定有些作业使完成了的,假如包含课j,则dp【i - (1<<j)】就表示i这种状态中不包含包含课j,即dp【i】可由dp【i-(1<<j)】这种状态推出来。然后不断更新dp【i】并记录路径即可。
n=15,所以枚举每种课上与不上的状态,dp【i】则表示i这种情况下(例如3表示只有第一第二门课完成)被扣最少的分。dp【i】中肯定有些作业使完成了的,假如包含课j,则dp【i - (1<<j)】就表示i这种状态中不包含包含课j,即dp【i】可由dp【i-(1<<j)】这种状态推出来。然后不断更新dp【i】并记录路径即可。
#include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <string> #include <math.h> #include <time.h> #include <stdio.h> #include <iomanip> ///cout << fixed << setprecision(13) << (double) x << endl; #include <stdlib.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 #define ls rt << 1 #define rs rt << 1 | 1 #define pi acos(-1.0) #define eps 1e-8 #define asd puts("sdfsdfsdfsdfsdfsdf"); #define Mp(a, b) make_pair(a, b) typedef long long ll; //typedef __int64 LL; const int inf = 0x3f3f3f3f; const int N = (1<<15) + 5; int dp , cost , dead ; int t ; int pre ; char c[20][110]; int n; void OUT( int cur ) { if( !cur ) return; OUT( cur - (1<<pre[cur]) ); printf("%s\n", c[pre[cur]]); } int main() { int tot; for( scanf("%d", &tot); tot--; ) { scanf("%d", &n); for( int i = 0; i < n; ++i ) scanf("%s%d%d", c[i], &dead[i], &cost[i]); int all = (1<<n); for( int i = 1; i < all; ++i ) { dp[i] = inf; for( int j = n-1; j >= 0; --j ) { int tmp = (1<<j); if( !( i & tmp ) ) continue; int sc = t[i-tmp] + cost[j] - dead[j]; sc = max( 0, sc ); //sc 为负则不扣分 if( dp[i] > dp[i-tmp] + sc ) { dp[i] = dp[i-tmp] + sc; t[i] = t[i-tmp] + cost[j]; pre[i] = j; } } } printf("%d\n", dp[all-1]); OUT( all-1 ); } return 0; }
相关文章推荐
- best cow line(poj3617)
- 集合划分
- android5.0使用svg
- 数据库查询Database中的表
- java序列化
- 微信开发第一步—接入指南
- 办公软件WORD,给自己来个私人订制模板
- 拆掉思维里的墙 读书笔记
- 路由器,防火墙的角色
- 有向图的强联通分量Tarjan算法模版(hdu1269)
- Centos Linux 开启端口 - 解决Centos发布服务外网访问不了的问题
- Hadoop2.6.0学习笔记(一)MapReduce介绍
- 软件开发工具
- CodeForces 399C Cards (数论)
- NSUnknownKeyException的原因
- 路由器,防火墙的角色
- Compound Words
- 我的Android进阶之旅------>Android嵌入图像InsetDrawable的用法
- 用D3.js进行医疗数据可视化 (一)折线图 (Line Chart)
- 精选30道Java笔试题解答