zoukankan      html  css  js  c++  java
  • Hdu 4293 DP

    题意:

    n个人说自己前面有多少人 后面有多少人

    求出说真话人数最多的情况 

    每个样例有 一个 n 表示n个人

    接下来 n 行有a b 表示他前面的人数和后面的人数

     

    思路:

    如果已经知道了其中一组的人数~

    就往前找..找在这一组之前与这一组的话不矛盾的最多人数

     

    Tips:

    用dp[ i ][ j ] 表示从第 i+1 个人到第 j 个人为一组的时候前j个人中说真话最多的人

    用tt[ i ][ j ] 表示从第 i 个人到第 j 个人之间站了多少人

    用an[ i ]表示到第 i 个人前面说真话的人最多人数

     

    tt[ a ][ b ]的人数不应该多于 n-(b-a+1) 

    Code:

    View Code
     1 #include <stdio.h>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 int dp[510][510];    
     7 int tt[510][510], an[510];
     8 
     9 int main()
    10 {
    11     int i, j, k;
    12     int n, a, b;
    13     while(scanf("%d", &n) != EOF)
    14     {
    15         memset(dp, 0, sizeof(dp));
    16         memset(an, 0, sizeof(an));
    17         memset(tt, 0, sizeof(tt));
    18 
    19         for(i = 0; i < n; ++i) {
    20             scanf("%d %d", &a, &b);
    21             if(a+b < n && tt[a][n-b] < (n-a-b))
    22                 tt[a][n-b]++;
    23         }
    24 
    25         for(i = 1; i <= n; ++i)
    26         for(j = 0; j < i; ++j) {
    27             dp[j][i] = an[j]+tt[j][i];
    28             an[i] = max(an[i], dp[j][i]);
    29         }
    30 
    31         printf("%d\n", an[n]);
    32     }
    33     return 0;
    34 }

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4293

  • 相关阅读:
    platform cannot apply stanford theme
    汉化、用户创建
    修改字段
    语言包格式错误引起组件崩溃
    配置LMS/Studio SMTP
    Javascript如何实现AOP
    【转】组件化的Web王国
    【转】前端组件化框架之路
    【转】ES6 手册
    【转】超实用的JavaScript技巧及最佳实践
  • 原文地址:https://www.cnblogs.com/Griselda/p/2692393.html
Copyright © 2011-2022 走看看