zoukankan      html  css  js  c++  java
  • hdu 4293 2012成都赛区网络赛 dp ****

    题意:有n个人,可任意分成若干组,然后每个人个各提供一个信息,表示他们组前面有多少人,后面有多少人。问最多有多少个信息是不冲突的。

    将n个人看成一组区间,然后每个人的信息可以表示为该人所在组的区间,然后求最大不相交的区间个数(区间可以完全覆盖),注意不是区间长度,长度是贪心

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #include <string>
     5 #include <cstring>
     6 #include <cstdlib>
     7 #include <algorithm>
     8 using namespace std;
     9 const int N = 505;
    10 int mp[N][N], dp[N];
    11 struct point
    12 {
    13     int a, b;
    14 } p[N];
    15 bool cmp(point x, point y)
    16 {
    17     if(x.b!=y.b) return x.b<y.b;
    18     else return x.a < y.a;
    19 }
    20 int main()
    21 {
    22     int n, a, b;
    23     while(scanf("%d", &n)!=EOF)
    24     {
    25         for(int i=0; i<n; i++)
    26         {
    27             scanf("%d%d", &a, &b);
    28             p[i].a = a+1;
    29             p[i].b = n-b;
    30         }
    31         sort(p, p+n, cmp);
    32         memset(mp, 0, sizeof(mp));
    33         memset(dp, 0, sizeof(dp));
    34         for(int i=0; i<n; i++)
    35         {
    36             a = p[i].a, b = p[i].b;
    37             if(a>b)
    38                 continue;
    39             if(mp[a][b]>=b-a+1)
    40                 continue;
    41             mp[a][b]++;
    42             dp[b] = max(dp[b], dp[a-1]+mp[a][b]);
    43             for(int j=b+1; j<=n; j++)
    44                 dp[j] = dp[b];
    45         }
    46         printf("%d
    ", dp[n]);
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    【Asp.Net从零开始】:上传文件(FileUpload)
    JavaScript变量声明及赋值
    427 类型数据
    427 自适应量化
    428 x264_reference_update
    427 expand_border
    426 pixel赋值问题 mbcmp函数 宏定义
    427 mb中一些参数记录备忘
    427 参考帧管理
    427 参数原来还有很多没有理解 比较详细的解释
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4750295.html
Copyright © 2011-2022 走看看