• URAL1900 Brainwashing Device(dp)


    1900

    二维dp挺好推 dp[i][j] = max(dp[i][j],dp[g][j-1]+o[i][i+1]-o[g][i+1])(i>g>=j-1) dp[i][j]表示第i个站台开放第j次设备 预处理出来通过i-j的人数 包括 i-1~j+1等等的 用o[i][j]表示的

    没睡好 %>_<%

    因为有可能全部都为0  初始化时dp设为-1.

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<queue>
     8 using namespace std;
     9 #define LL long long
    10 int dp[510][510],q[510];
    11 int w[510][510],o[510][510],pa[510][510];
    12 int main()
    13 {
    14     int i,j,n,k;
    15     cin>>n>>k;
    16     for(i = 1; i < n ;i++)
    17     {
    18         for(j = 1; j <= n-i ; j++)
    19         {
    20             int x;
    21             cin>>x;
    22             w[i][i+j] = x;
    23         }
    24     }
    25     for(i = 1; i <= n ; i++)
    26     {
    27         for(j = n ; j > i ; j--)
    28         o[i][j] = o[i][j+1]+w[i][j]+o[i-1][j]-o[i-1][j+1];
    29     }
    30     memset(dp,-1,sizeof(dp));
    31     for(i = 1; i < n ;i++)
    32     dp[i][1] = o[i][i+1];
    33     for(j = 2; j <= k ; j++)
    34     for(i = j; i < n; i++)
    35     {
    36         int kk;
    37         for(int g = 1 ; g < i ; g++)
    38         {
    39             if(dp[g][j-1]+o[i][i+1]-o[g][i+1]>dp[i][j])
    40             {
    41                 dp[i][j] = dp[g][j-1]+o[i][i+1]-o[g][i+1];
    42                 kk = g;
    43             }
    44         }
    45         pa[i][j] = kk;
    46     }
    47     int maxz=-1,x;
    48     for(i = k; i < n ; i++)
    49     {
    50         if(maxz<dp[i][k])
    51         {
    52             maxz = dp[i][k];
    53             x = i;
    54         }
    55     }
    56     cout<<maxz<<endl;
    57     int e = 1;
    58     q[e] = x;
    59     while(k>1)
    60     {
    61         x = pa[x][k];
    62         q[++e] = x;
    63         k--;
    64     }
    65     sort(q+1,q+e+1);
    66     for(i = 1; i < e ; i++)
    67     cout<<q[i]<<" ";
    68     cout<<q[e]<<endl;
    69     return 0;
    70 }
    71 /*
    72 5 3
    73 5 0 6 5
    74 5 3 7
    75 5 3
    76 10
    77 44
    78 1 2 4
    79 4 2
    80 5 0 6
    81 5 3
    82 5
    83 19
    84 1 2
    85 
    86 4 3
    87 5 0 6
    88 5 3
    89 5
    90 24
    91 1 2 3
    92 */
    View Code
  • 相关阅读:
    详解实现Android中实现View滑动的几种方式
    一起写一个Android图片轮播控件
    Java核心技术点之多线程
    深入了解整数在计算机内部的表示
    Java核心技术点之接口
    Java核心技术点之内部类
    配置resin web方式部署项目
    rsa加密算法,前后端实现。
    引用百度bcebos jar 503问题
    HashMap get()返回值问题
  • 原文地址:https://www.cnblogs.com/shangyu/p/3543097.html
Copyright © 2020-2023  润新知