HDU4001(动态规划)
来源:互联网 发布:飞思卡尔单片机入门 编辑:程序博客网 时间:2024/05/18 01:35
#include <stdio.h>#include <cstdlib>#include <iostream>#include <algorithm>#include <cstring>using namespace std;struct block{ __int64 a,b,c,d;} bl[1005];bool cmp(block x,block y){ if(x.a!=y.a) return x.a<y.a; if(x.b!=y.b) return x.b<y.b; return x.d>y.d;}__int64 Max(__int64 a,__int64 b){ if(a>b) return a; else return b;}int main(){ int n; //freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF) { if(n==0) break; for(int i=1; i<=n; i++) { scanf("%I64d%I64d%I64d%I64d",&bl[i].a,&bl[i].b,&bl[i].c,&bl[i].d); __int64 temp; if(bl[i].a<bl[i].b) { temp=bl[i].a; bl[i].a=bl[i].b; bl[i].b=temp; } } sort(bl+1,bl+1+n,cmp); __int64 dp[1005]; bl[0].a=0; bl[0].b=0; bl[0].c=0; bl[0].d=0; memset(dp,0,sizeof(dp)); for(int i=1; i<=n; i++) for(int j=i-1; j>=0; j--) { if(bl[i].d==0&&bl[j].a<=bl[i].a&&bl[j].b<=bl[i].b) dp[i]=Max(dp[i],dp[j]+bl[i].c); if(bl[i].d==1&&bl[j].a<=bl[i].a&&bl[j].b<=bl[i].b&&bl[j].a*bl[j].b<bl[i].a*bl[i].b) dp[i]=Max(dp[i],dp[j]+bl[i].c); if(bl[i].d==2&&bl[j].a<bl[i].a&&bl[j].b<bl[i].b) dp[i]=Max(dp[i],dp[j]+bl[i].c); } __int64 max=0; for(int i=1; i<=n; i++) if(max<dp[i]) { max=dp[i]; } printf("%I64d\n",max); } return 0;}
0 0
- HDU4001(动态规划)
- HDU4001-To Miss Our Children Time(DAG动态规划)
- hdu4001
- 【HDU4001】To Miss Our Children Time(LIS变形)
- 【动态规划(一)】动态规划基础
- 动态规划(1)
- 动态规划(2)
- 动态规划(3)
- 动态规划(4)
- HDOJ2046(动态规划)
- 动态规划(one)
- 动态规划(读书笔记)
- Pearls(动态规划)
- skiing(动态规划)
- 作业题 (动态规划)
- Zipper(动态规划)
- 滑雪(动态规划)
- 动态规划(1)
- 链队列
- C#工厂模式-抽象工厂
- 打印沙漏(20)
- jsp--el/c/ognl/struts标签开发案例对比
- Harris角点检测
- HDU4001(动态规划)
- C/C++语言函数
- 素数对猜想 (20)
- 那些困扰你的DOM集合类型
- 计科——考研之我见
- 数组元素循环右移问题 (20)
- 算法训练 逆序对 (AVL平衡二叉树)
- 微机原理、计算机组成原理与计算机体系结构之间的关系
- Have Fun with Numbers (20)