Metal Steak

Hard to eat

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 79 Stories :: 0 Comments :: 0 Trackbacks

公告

aaaaaaaaaaaa

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

#include <iostream>
using namespace std;

int
number[
41], starnumber, numbernumber;

struct
HighNumber
{
    
int n[41];
    HighNumber()
    {
        memset( n, 
0sizeof n );
        n[
0= 1;
    }
    HighNumber
    
operator * ( const HighNumber& h )
    {
        HighNumber prod;
        prod.n[
0= n[0+ h.n[0];
        
forint i = 1; i <= n[0]; i++ )
            
forint j = 1; j <= h.n[0]; j++ )
            {
                prod.n[i 
+ j - 1+= n[i] * h.n[j];
                prod.n[i 
+ j] += prod.n[i + j - 1/ 10;
                prod.n[i 
+ j - 1%= 10;
            }
        
while( prod.n[prod.n[0]] == 0 && prod.n[0> 1 )
            prod.n[
0]--;
        
return prod;
    }
    
bool
    
operator > ( const HighNumber& h )                 //高精度数大于号重载最终版
    {
        
if( n[0> h.n[0] )
            
return true;
        
if( n[0< h.n[0] )
            
return false;
            
forint i = n[0]; i > 0; i-- )
            {
                
if( n[i] > h.n[i] )
                    
return true;
                
if( n[i] < h.n[i] )
                    
return false;
            }
    
return true;
    }
}f[
41][7];

ostream
&
operator << ( ostream& outconst HighNumber &h )
{
    
forint i = h.n[0]; i > 0; i-- )
        
out << h.n[i];
    
return out;
}

HighNumber
ConvertToHighNumber( 
int start, int end )         //看英语就知道是啥意思了
{
    HighNumber h;
    
forint i = end; i >= start; i-- )
        h.n[h.n[
0]++= number[i];
    h.n[
0]--;
    
return h;
}

void
__read__()
{
    cin 
>> numbernumber >> starnumber;
    
forint i = 1; i <= numbernumber; i++ )
    {
        
char cn;
        cin 
>> cn;
        number[i] 
= cn - '0';
    }
}

void
__init__()
{
    
forint i = 1; i <= numbernumber; i++ )
        f[i][
0= ConvertToHighNumber( 1, i );
}

void
__dp__()                                     
//动态规划部分,,很简单的
{
    
forint i = 1; i <= starnumber; i++ )
        
forint j = i + 1; j <= numbernumber; j++ )
            
forint k = i; k < j; k++ )
            {
                HighNumber ht 
= f[k][i - 1* ConvertToHighNumber( k + 1, j );
                
if( ht > f[j][i] )
                    f[j][i] 
= ht;
            }
}

void
__outp__()
{
    cout 
<< f[numbernumber][starnumber] << endl;    //这是重载过的<<,不然要用函数输出地。。
}

int
main()
{
    __read__();
    __init__();
    __dp__();
    __outp__();

    
return 0;
}

posted on 2009-09-15 20:59 mad4alcohol 阅读(213) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理