zoukankan      html  css  js  c++  java
  • VJP1218数字游戏(环形DP)

    链接

    数据比较小 直接爆了 5重 

    枚举断开的琏 dp[i][j][k] (i-j)区间为第k段 dp[i][j][k] = min(dp[i][j][k],dp[g][i-1][k-1]*s[i][j])(g<=i-1) s[i][j]为i-j的和 

    最大值类似 不知道为嘛要加50W  很纳闷 加小了就WA

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #define INF 100000
     7 using namespace std;
     8 int a[110],dp1[105][105][15],dp2[55][55][15],s[105][105];
     9 int main()
    10 {
    11     int i,j,k,n,g,o,e,aa,b,c;
    12     while(scanf("%d%d",&n,&k)!=EOF)
    13     {
    14         for(i = 1; i <= n ; i++)
    15         scanf("%d",&a[i]);
    16         for(i = 1; i <= n ; i++)
    17         a[n+i] = a[i];
    18         for(i = 1; i <= 2*n ; i++)
    19         {
    20             s[i][i] = (a[i]+500000)%10;
    21             for(j = i+1 ; j <= 2*n ; j++)
    22             s[i][j] = (s[i][j-1]+a[j]+500000)%10;
    23         }
    24         int minz = INF,maxz=0;
    25         for(i = 0; i < n ; i++)
    26         {
    27             for(aa = 0 ; aa <= k ; aa++)
    28             for(c = 0 ; c <= 2*n ; c++)
    29                 for(b = 0 ; b <= 2*n ; b++)
    30                 {
    31                     dp1[c][b][aa] = INF;
    32                     dp2[c][b][aa] = 0;
    33                 }
    34             for(j = i+1 ; j <= i+n-(k-1) ; j++)
    35             {
    36                 dp1[i+1][j][1] = s[i+1][j];
    37                 dp2[i+1][j][1] = s[i+1][j];
    38             }
    39             for(j = 2; j <= k ; j++)
    40             {
    41                 for(g = i+j ; g <= i+n-(k-j) ; g++)
    42                 {
    43                     for(e = g ; e <= i+n-(k-j) ; e++)
    44                     {
    45                         dp1[g][e][j] = INF;
    46                         for(o = i+j-1 ; o < g ; o++)
    47                         {
    48                             dp1[g][e][j] = min(dp1[g][e][j],dp1[o][g-1][j-1]*s[g][e]);
    49                             dp2[g][e][j] = max(dp2[g][e][j],dp2[o][g-1][j-1]*s[g][e]);
    50                         }
    51                     }
    52                 }
    53             }
    54             for(j = i+1 ; j <= i+n ; j++)
    55             {
    56                 maxz = max(maxz,dp2[j][i+n][k]);
    57                 minz = min(minz,dp1[j][i+n][k]);
    58             }
    59         }
    60         printf("%d
    %d
    ",minz,maxz);
    61     }
    62     return 0;
    63 }
    View Code
  • 相关阅读:
    0508---字符串练习题
    0506--习题
    0503---练习题 punctuation isdigit() strip() upper()
    0505---练习题
    0504---习题str.swapcase() str. capitalize() str.title()
    0429---每日习题 菲薄纳西数列 正则ip匹配
    习题之---文件操作
    NOIP 模拟 $13; ext{工业题}$
    NOIP 模拟 $12; ext{简单的填数}$
    NOIP 模拟 $12; ext{简单的玄学}$
  • 原文地址:https://www.cnblogs.com/shangyu/p/3268255.html
Copyright © 2011-2022 走看看