zoukankan      html  css  js  c++  java
  • JZ初中OJ 1437. [普及组_在线赛]最小与最大

    题目描述

    做过了乘积最大这道题,相信这道题也难不倒你。 已知一个数串,可以在适当的位置加入乘号(设加了k个,当然也可不加,即分成k+1个部分),设这k+1个部分的乘积(如果k=0,则乘积即为原数串的值)对m 的余数(即mod m)为x; 现求x能达到的最小值及该情况下k的最小值,以及x能达到的最大值及该情况下的k的最小值(可以存在x的最小值与最大值相同的情况)。

    以下是{原题:符文之语}另一种题目描述,题意相同:
    {         当小 FF 来到神庙时,神庙已经破败不堪了。 但神庙的中央有一个光亮如新的石台。小 FF 走近石台,发现石台上有一个数串,而数串的上方刻着一串古老的符文之语。精通古符文之语的小 FF 不费吹灰之力就读懂了文章的意思, 其大意是:
             对于石台上的一串数字,你可以在适当的位置加入乘号(设加了 k 个,当然也可不加, 即分成 k+1 个部分),设这 k+1 个部分的乘积(如果 k=0,则乘积即为原数串的值)对 m 的余数(即 mod m)为 x;
             现求 x 能达到的最小值及该情况下 k 的最小值,以及 x 能达到的最大值及该情况下的 k 的最小值(可以存在 x 的最小值与最大值相同的情况)。
            小 FF 还知道, 如果他找到了正确的答案,那么就可以通往神庙的下层了。但这个问题似乎不太好解决, 小FF 就找到了你,并答应找到财宝以后和你二八分(当然你拿二……)。}
     

    输入

    第一行为数串,长度为n 满足2<=n<=1000,且数串中不存在0; 第二行为m,满足2<=m<=50。

    输出

    四个数,分别为x的最小值 和 该情况下的k,以及x的最大值和 该情况下的k,中间用空格隔开。
     

    样例输入

    4421
    22

    样例输出

    0 1 21 0
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,a[1001],sum[1001][1001],dp[1001][100];
     4 char c[1001];
     5 int main()
     6 {
     7     freopen("minmax.in","r",stdin);
     8     freopen("minmax.out","w",stdout);
     9     for(int i=0;i<=1000;i++)
    10     for(int j=0;j<=50;j++)
    11     dp[i][j]=0x7f7f7f;
    12     cin>>c>>m;    
    13     int len=strlen(c); 
    14     for(int i=0;i<len;i++)
    15     a[i+1]=c[i]-'0';
    16     for(int i=1;i<=len;i++)
    17         for(int j=i;j<=len;j++)
    18         sum[i][j]=(sum[i][j-1]*10+a[j])%m;
    19     for(int i=1;i<=len;i++)
    20     dp[i][sum[1][i]]=1;
    21     for(int i=1;i<=len;i++)
    22     {
    23         for(int j=1;j<i;j++)
    24         {
    25             for(int k=0;k<=m-1;k++)
    26             dp[i][(k*sum[j+1][i])%m]=min(dp[i][(k*sum[j+1][i])%m],dp[j][k]+1);
    27         }
    28     }
    29     for(int i=0;i<=m-1;i++)
    30     {
    31         if(dp[len][i]!=0x7f7f7f)
    32         {
    33             cout<<i<<" "<<dp[len][i]-1<<" ";
    34             break;
    35         }
    36     }
    37     for(int i=m-1;i>=0;i--)
    38     {
    39         if(dp[len][i]!=0x7f7f7f)
    40         {
    41             cout<<i<<" "<<dp[len][i]-1<<" ";
    42             break;
    43         }
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    linux 上安裝lnmp
    html 禁用点击事件
    nftables 是什么? 提供什么功能? 如何使用?
    ESXi主机RAID卡_HBA卡_网卡 型号_固件_驱动查询
    Celery Beat定时任务
    Centos 7/8 安装Rabbit-MQ
    Celery 最佳实践
    Django 3.0 + Celery 4.4 + RabbitMQ
    C语言Socket示例
    深入理解计算机系统 — 读书笔记
  • 原文地址:https://www.cnblogs.com/dsanying/p/11305960.html
Copyright © 2011-2022 走看看