【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 104841
  • 排名 - 233

最新评论

阅读排行榜

评论排行榜

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

输入格式 Input Format
第一行为数串,长度为l 满足2<=l<=1000,且数串中不存在0;
第二行为m,满足2<=m<=50.

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

样例输入 Sample Input  
4421
22

样例输出 Sample Output  
0 1 21 0

分析:
F[i][j]表示1-->i制造余数为j需要添加的最少乘号。
B[i][j]表示(i-->j)mod m 的余数。
状态方程:F[k][s]=min(F[i][j]+1) (i+1<=k<=n,s=(i+1-->k)的乘积 mod m的余数)
answer就是顺着找的第一个就是最小而逆着找的第一个就是最大的。


【参考程序】:

#include<cstring>
#include
<cstdio>
#include
<iostream>
using namespace std;

int F[1010][510],B[1010][1010
];
string
 ch;
int
 n,m;
int
 main()
{
    getline(cin,ch);
    n
=ch.length(); ch=' '+
ch;
    cin
>>
m;
    
for (int i=1;i<=n;i++
)
        
for (int j=0;j<=m-1;j++
)
            F[i][j]
=10000
;
    
int s=0
;
    
for (int i=1;i<=n;i++
)
    {
        s
=(s*10+(ch[i]-'0'))%
m;
        F[i][s]
=0
;
    }
    memset(B,
0,sizeof
(B));
    
for (int i=1;i<=n;i++
)
        
for (int j=i;j<=n;j++
)
            B[i][j]
=(B[i][j-1]*10+(ch[j]-'0'))%
m;
    
for (int i=1;i<=n;i++
)
        
for (int j=0;j<=m-1;j++
)
            
if (F[i][j]<10000
)
                
for (int k=i+1;k<=n;k++
)
                {
                    s
=(B[i+1][k]*j)%
m;
                    
if (F[k][s]>F[i][j]+1
)
                        F[k][s]
=F[i][j]+1
;
                }
    
for (int i=0;i<=m-1;i++
)
        
if (F[n][i]<10000
)
        {
            cout
<<i<<' '<<F[n][i]<<' '
;
            
break
;
        }
    
for (int i=m-1;i>=0;i--
)
        
if (F[n][i]<10000
)
        {
            cout
<<i<<' '<<F[n][i]<<
endl;
            
break
;
        }
    
return 0
;
}
posted on 2009-08-19 08:40 开拓者 阅读(160) 评论(0)  编辑 收藏 引用 所属分类: 动态规划&背包Vijos OJ

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理