input:minmax.in output:minmax.out
时间限制: 1000 ms 空间限制: 60000 KB 具体限制
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 }