题目:http://acm.hdu.edu.cn/showproblem.php?pid=4001

题意不多解释,说说思路:按照长和宽排序,排序后,前面的方块一定不能叠放在后面的方块上,而后面的方块有可能放在前面的方块上。然后DP找出最优解。

详见代码:
#include<iostream>
#include<algorithm>
using namespace std;

struct node{
    int a,b,d;
    __int64 c;
}block[1100];
int cmp(const void *a,const void *b)
{   
    node t1,t2;
    t1 = *(node *)a;
    t2 = *(node *)b;
    if(t1.a != t2.a)return t1.a - t2.a; 
    if(t1.b != t2.b)return t1.b - t2.b;  
    return t2.d - t1.d;
}

__int64 f[1100];

int main()
{
    int i,j,n,k;
    __int64 ans;
    while(scanf("%d",&n) && n)
    {
        ans = 0;
        for(i = 0;i < n;i++)
        {
            scanf("%d%d%I64d%d",&block[i].a,&block[i].b,&block[i].c,&block[i].d);
            if(block[i].a <block[i].b)
                swap(block[i].a,block[i].b);
        }
        qsort(&block[0],n,sizeof(block[0]),cmp);
        for(i = 0;i < n;i++)
        {
            f[i] = block[i].c;
            for(j = 0;j < i;j++)
            {
                if(block[i].d == 0 && block[i].a >= block[j].a && block[i].b >= block[j].b && f[j] + block[i].c > f[i])
                    f[i] = f[j] + block[i].c;
                else if(block[i].d == 1 && block[i].a >= block[j].a && block[i].b >= block[j].b && (block[i].a > block[j].a || block[i].b > block[j].b) && f[j] + block[i].c > f[i])
                    f[i] = f[j] + block[i].c;
                else if(block[i].d == 2 && block[i].a > block[j].a && block[i].b > block[j].b && f[j] + block[i].c > f[i])
                    f[i] = f[j] + block[i].c;
            }
            if(f[i] > ans)
                ans = f[i];
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

hdu 4001 (2011ACM/ICPC大连网络赛)相关推荐

  1. HDU 5869.Different GCD Subarray Query-区间gcd+树状数组 (神奇的标记右移操作) (2016年ICPC大连网络赛)...

    树状数组... Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/6 ...

  2. HDU - 5875 2016 ACM/ICPC 大连网络赛 H题 暴力

    题目链接 题意:给你一个区间l,r一直将val[l]模上val[l+1],val[l+2]...val[r],因为一个模上比前一个数小数是没有意义的,所以需要将每一个点找到右边第一个小于他的点就行. ...

  3. HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路

    题目链接 题意:给的补图,让你求一个源点到其他点的最短距离,因为图太稠密了, 用dij以及spfa根本不得行,这里只能用一种我不会方法来进行,这里用了bfs的方法以及set来维护,分别set维护一个未 ...

  4. HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化

    题目链接 You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-neg ...

  5. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  6. 2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟

    2016 ICPC 北京网络赛 A - The Book List 题意:每本书有所属种类,给出原生的存放方式,求按新的方式存放的样子. tags:坑到心态爆炸的题==  直接堆进vector里搞的, ...

  7. 2019 ICPC 南昌网络赛 H. The Nth Item

    2019 ICPC 南昌网络赛 H. The Nth Item 题目大意:已知一个数列F(n): F(0)=0,F(1)=1 F(n)=3∗F(n−1)+2∗F(n−2),(n≥2) ​ 给你一个操作 ...

  8. 2019 ICPC 徐州网络赛 J.Random Access Iterator

    2019 ICPC 徐州网络赛 J.Random Access Iterator 题目大意:给你n个点和n-1条边(树形结构),保证1为根节点,通过以下方式dfs遍历: 询问dfs到最深节点的概率(有 ...

  9. ACM练级日志:HDU 4735(ACM 成都网络赛) 重复覆盖与DLX

    今天费了一下午+一晚上的劲,终于把重复覆盖问题给解决了.作为这算法的牺牲品的就是成都网络赛让我知道DLX这东西存在的那道题,HDU 4735.这也是第一次尝试独立对问题构造矩阵然后调用DLX得出结果的 ...

最新文章

  1. DiskLruCache 源码解析
  2. 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
  3. Hibernate随机获取指定范围内的指定条目的记录
  4. Using ZipLib to create a Zip File in C#
  5. jquery 清空表单
  6. 入门 IT 行业,该具备哪些技能?
  7. IOS多线程之Block编程
  8. 带有第三方工具的Spring Boot Initilizr
  9. txt文件参数化200用户,返回在表格中查看只能看到100行数据
  10. BZOJ4247挂饰
  11. “我是技术总监,你为毛总问我技术细节?”
  12. 移动端前端开发技术概况
  13. 计算机辅助初中英语教学,利用多媒体优化初中英语课堂教学课题研究
  14. Android原生态实现分享转发功能(分享图片到其他APP)
  15. 路由器实验要求之配置实验、直连路由验证、静态路由
  16. 信度和效度经典例子_信度与效度有什么关系?
  17. Datawhale组队学习周报(第034周)
  18. 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  19. 视频画中画制作,一键合并多个视频,简单又专业
  20. Hbase预分区与优化

热门文章

  1. 常见的端口号以及协议
  2. 开发过程中 勘误表errata注意事项
  3. Qt、C++实现五子棋人机对战与本地双人对战
  4. 【python数据分析实战】城市餐饮店铺选址问题(1)—— 对不同菜系进行比较,并筛选出可开店铺的餐饮类型
  5. Office Visio简介
  6. linux中安装openoffice,及解决转pdf时中文乱码或者中文不显示问题【离线】
  7. 关于HTML的一些知识
  8. opencv inrange函数
  9. window下vmware使用无线网卡nat的方式上网
  10. 阿里试用,女朋友逼着我给她排序