zoukankan      html  css  js  c++  java
  • UVA 11552 四 Fewest Flops

    Fewest Flops

    Time Limit:2000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 using namespace std;
     5 int main()
     6 {
     7     int T;
     8     int k,numk;
     9     int i,j;
    10     char a[1005];
    11     int num[1005],q[1005][30],dp[1005][30];
    12     scanf("%d",&T);
    13     while(T--)
    14     {
    15         memset(num,0,sizeof(num));
    16         memset(q,0,sizeof(q));
    17         memset(dp,0,sizeof(dp));
    18         scanf("%d",&k);
    19         scanf("%s",a);
    20         int l=strlen(a);
    21         numk=l/k;
    22         if(l%k!=0)
    23             numk++;
    24         for(i=1;i<=numk;i++)
    25         {
    26             for(j=(i-1)*k;j<=i*k-1 && j<l;j++)
    27             {
    28                 int o=a[j]-'a'+1;
    29                 if(q[i][o]==0)
    30                 {
    31                     num[i]++;
    32                     q[i][o]=1;
    33                 }
    34             }
    35         }
    36 
    37         for(i=1;i<=26;i++)
    38         {
    39             if(q[1][i]==1)
    40                 dp[1][i]=num[1];
    41         }
    42 
    43         for(i=2;i<=numk;i++)
    44         {
    45             for(j=1;j<=26;j++)
    46             {
    47                 if(q[i][j]==1)
    48                 {
    49                     if(q[i-1][j]==1)
    50                     {
    51                         dp[i][j]=dp[i-1][j]+num[i];
    52                         if(num[i-1]==1)
    53                             dp[i][j]--;
    54                         else
    55                         {
    56                             for(int u=1;u<=26;u++)
    57                             {
    58                                 if(u!=j && q[i-1][u]==1)
    59                                     dp[i][j]=min(dp[i][j],dp[i-1][u]+num[i]-1);
    60                             }
    61                         }
    62                     }
    63                     else
    64                     {
    65                         dp[i][j]=9999;
    66                         for(int u=1;u<=26;u++)
    67                         {
    68                             if(q[i-1][u]==1)
    69                                 dp[i][j]=min(dp[i][j],dp[i-1][u]+num[i]);
    70                         }
    71                     }
    72                 }
    73             }
    74         }
    75 
    76         int ans=9999;
    77         for(int i=1;i<=26;i++)
    78         {
    79             if(q[numk][i]==1 && dp[numk][i]<ans)
    80                 ans=dp[numk][i];
    81         }
    82 
    83         printf("%d
    ",ans);
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    App Store 审核指南
    Redis持久化
    PHP扩展高性能日志系统SeasLog简单上手
    Linux下Redis的安装配置
    Windows下Redis的安装
    安装wamp环境 最新完整版
    Git安装配置(完整版)
    Linux下SVN配置
    配置最新版LAMP环境
    Linux下ftp的安装配置
  • 原文地址:https://www.cnblogs.com/cyd308/p/4771573.html
Copyright © 2011-2022 走看看