hdu 4001 To Miss Our Children Time (DP)
来源:互联网 发布:菜鸟网络杭州总部 编辑:程序博客网 时间:2024/04/29 20:41
思路:转化为DAG上的动态规划,长方体的“可堆叠”关系是一个典型的二元关系,用图来建模。如果一个长方体X可以放在另外一个长方体Y的上面我们就从X到Y连一条边。这个有向图在缩点后是无环的。是一个DAG,求DAG上的最大高度即可。
F(i)代表当最上面一个长方体是第i个时能得到的最大高度。
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 1000+5;long long N, a[MAXN], b[MAXN], c[MAXN], d[MAXN] , l , w , h , t;int tot;int map[MAXN][MAXN];long long f[MAXN];bool flag;long long F(int u){ if (f[u]) return f[u]; for (int i = 0; i < tot; i ++) if(map[u][i] == 1) f[u] = max(f[u], F(i)); return f[u] = f[u] + c[u];}int main(){ while (scanf("%d" , &N) && N){ memset(map, -1, sizeof(map)); memset(f, 0, sizeof(f)); tot = 0; for (int i = 0; i < N; i++){ scanf("%lld%lld%lld%lld", &l, &w, &h, &t); flag = false; if (l > w) swap(l, w); if(t == 0){ for(int j = 0 ; j < i ; j ++){ if(d[j] == 0 && l == a[j] && w == b[j]){ c[j] += h; flag = true; break; } } } if(flag == false){ a[tot] = l; b[tot] = w; c[tot] = h; d[tot] = t; tot ++; } } for (int i = 0; i < tot; i++) for (int j = 0; j < tot; j++) if (i != j){ if (d[i] == 0){ if (a[i] >= a[j] && b[i] >= b[j]) { map[i][j] = 1; } } else if (d[i] == 1){ if (a[i] >= a[j] && b[i] >= b[j] && a[i]*b[i] > a[j]*b[j]) map[i][j] = 1; } else{ if (a[i] > a[j] && b[i] > b[j]) map[i][j] = 1; } } long long ans = 0; for (int u = 0; u < tot; u++) ans = max(ans, F(u)); printf("%I64d\n", ans); } return 0;}/*10 10 12 010 10 11 010 10 12 0*//*1010 10 12 010 10 11 010 10 12 010 10 11 210 10 11 25 5 10 05 5 1 06 6 10 010 11 2 26 7 4 1*/
- HDU 4001 To Miss Our Children Time 最长路, DP
- hdu 4001 dp To Miss Our Children Time
- hdu 4001 To Miss Our Children Time (DP)
- hdu 4001 To Miss Our Children Time DP
- HDU 4001 To Miss Our Children Time(DP LIS)
- 【HDU 4001】 To Miss Our Children Time(DP)
- HDU 4001 To Miss Our Children Time【dp】
- HDU 4001 To Miss Our Children Time
- Hdu 4001 - To Miss Our Children Time
- hdu 4001 To Miss Our Children Time
- hdu 4001 To Miss Our Children Time
- HDU--4001[To Miss Our Children Time] 排序+SPFA
- HDU 4001 To Miss Our Children Time (动态规划)
- HDU 4001 To Miss Our Children Time (DAG上的DP,最长路)
- HDU 4001 To Miss Our Children Time [2011 大连网络赛] [DP]
- HDU 4001 To Miss Our Children Time(DAG上的DP)
- HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)
- 【hdoj 4001】To Miss Our Children Time
- hdu 2023 求平均成绩
- Spring JdbcTemplate方法详解
- iOS开发:Toast for iPhone 实例分享
- NYOJ 45-棋盘覆盖:大数问题
- APUE读书笔记-第11章-线程
- hdu 4001 To Miss Our Children Time (DP)
- eclipse erlang 插件安装
- Linux内存管理-free命令
- UIGlossyButton - iOS默认效果的按钮
- uclinux
- Ubuntu下安装ADB
- 阿喀琉斯悖论讨论
- django sql_queries 模板中显示所有的sql查询调试信息
- Android借助Application重写App的Crash(完整版)