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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM