zoukankan      html  css  js  c++  java
  • DP Codeforces Round #260 (Div. 1) A. Boredom

    题目传送门

     1 /*
     2     题意:选择a[k]然后a[k]-1和a[k]+1的全部删除,得到点数a[k],问最大点数
     3     DP:状态转移方程:dp[i] = max (dp[i-1], dp[i-2] + (ll) i * cnt[i]);
     4         只和x-1,x-2有关,和顺序无关,x-1不取,x-2取那么累加相同的值,ans = dp[mx]
     5 */
     6 #include <cstdio>
     7 #include <algorithm>
     8 #include <cstring>
     9 #include <iostream>
    10 #include <cmath>
    11 using namespace std;
    12 
    13 typedef long long ll;
    14 const int MAXN = 1e5 + 10;
    15 const int INF = 0x3f3f3f3f;
    16 ll dp[MAXN];
    17 int cnt[MAXN];
    18 
    19 int main(void)        //Codeforces Round #260 (Div. 1) A. Boredom
    20 {
    21     int n;
    22     while (scanf ("%d", &n) == 1)
    23     {
    24         memset (dp, 0, sizeof (dp));
    25         memset (cnt, 0, sizeof (cnt));
    26 
    27         int x, mx = 0;
    28         for (int i=1; i<=n; ++i)    {scanf ("%d", &x);    cnt[x]++;    if (mx < x) mx = x;}
    29 
    30         dp[1] = cnt[1];
    31         for (int i=2; i<=mx; ++i)
    32         {
    33             dp[i] = max (dp[i-1], dp[i-2] + (ll) i * cnt[i]);
    34         }
    35 
    36         printf ("%I64d
    ", dp[mx]);
    37     }
    38 
    39     return 0;
    40 }
    41 
    42 
    43 
    44 /*
    45 2
    46 1 2
    47 3
    48 1 2 3
    49 9
    50 1 2 1 3 2 2 2 2 3
    51 */
    编译人生,运行世界!
  • 相关阅读:
    20180827 360笔试客观题
    20180821 hikvision笔试
    20180820 美团一面
    20180811 网易
    20180811 多益网络
    20180810 多益网络模拟笔试
    hbase --知识点总结
    flume知识点总结
    oracle --hint总结
    查看oracle的执行计划
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4549820.html
Copyright © 2011-2022 走看看