• hdu4293Groups


    http://acm.hdu.edu.cn/showproblem.php?pid=4293

    这题单拉出来写篇吧 确实不错的一题

    将每个人说的话 转化一下 可以算出它处在哪个段中 题目就转换成了求不相交的最大段数 注意区间相同的情况

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 struct node
     8 {
     9     int l,r;
    10 }p[510];
    11 int dp[510],w[510][510];
    12 bool cmp(node a,node b)
    13 {
    14     if(a.l==b.l)
    15     return a.r<b.r;
    16     return a.l<b.l;
    17 }
    18 int main()
    19 {
    20     int i,j,k,n,a,b;
    21     while(cin>>n)
    22     {
    23         int g=0;
    24         memset(w,0,sizeof(w));
    25         for(i = 1; i <= n ;i++)
    26         {
    27             scanf("%d%d",&a,&b);
    28             if(a+b<n)
    29             {
    30                 g++;
    31                 p[g].l = a+1;
    32                 p[g].r = n-b;
    33             }
    34         }
    35         sort(p+1,p+g+1,cmp);
    36         for(i = 1; i <= g ; i++)
    37         {
    38             w[p[i].l][p[i].r]++;
    39             if(w[p[i].l][p[i].r]>(p[i].r-p[i].l+1))
    40             w[p[i].l][p[i].r] = p[i].r-p[i].l+1;
    41         }
    42         for(i = 1 ;i <= g ; i++)
    43         dp[i] = w[p[i].l][p[i].r];
    44         for(i = 1; i <= g ; i++)
    45             for(j = 1 ; j < i ; j++)
    46             if(p[i].l>p[j].r)
    47             dp[i] = max(dp[i],dp[j]+w[p[i].l][p[i].r]);
    48         int maxz = 0;
    49         for(i = 1; i <= g ; i++)
    50         maxz = max(dp[i],maxz);
    51         cout<<maxz<<endl;
    52     }
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    CSS 基础(一)
    74.Search a 2D Matrix
    73.Set Matrix Zeroes
    66.Plus One
    64.Minimum Path Sum
    63.Unique Paths II
    62.Unique Paths
    54.Spiral Matrix
    59.Spiral Matrix II
    55.Jump Game
  • 原文地址:https://www.cnblogs.com/shangyu/p/3250505.html
Copyright © 2020-2023  润新知