码迷,mamicode.com
首页 > 其他好文 > 详细

rqnoj 纪念品分组

时间:2014-11-15 18:42:25      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   sp   for   strong   div   on   

题目描述

根据NOIP2007普及组第二题衍生的一道题目。

-------------------------------------------------

元旦快到了,校学生会让猪肝负责新年晚会的纪念品发放工作。它购买了很多纪念品,它要把购来的纪念品进行分组。这些纪念品我们用一群数字代表他们,把它们分组后,它们将组成一些新的组合数字。如把【1234】这堆物品分为2组,它们可以是{【12】,【34】;【1】,【234】;【4】,【123】}之类的组合。

-------------------------------------------------

猪肝想要分组后它们组成新的数字,每组的总乘积的值尽量的大,请你帮助它想想办法。

输入格式

第一行两个数:

N(N<40)【为纪念品的表示的数字的位数;】

K(k<n)【为将要把纪念品分为的组数。】

第二行一个数:

M【为纪念品的表示的数字】

输出格式

一个数,可能的最大和

样例输入
样例输出
 
提交题目 bubuko.com,布布扣 Error [ 更改语言 ] Language
#include<stdio.h>
#include<stdlib.h>
int n,k;
char s[1000];
unsigned long long f[50][50];
int a[1000];
unsigned long long make(int x,int y)
{
         char ss[1000];
         for (int i=x;i<=y;++i)
             ss[i-x]=s[i];
         return atoi(ss);
}
int main()
{
    scanf("%d%d",&n,&k);
    scanf("%s",s);
    for (int i=1;i<=n;++i) a[i]=s[i-1]-‘0‘;
    for (int i=1;i<=n;++i) f[i][0]=make(1,i);
    for (int l=1;l<=k;++l)
        for (int i=2;i<=n;++i)
            for (int j=2;j<=i;++j)
                if (f[i][l]<f[j-1][l-1]*make(j,i))
                   f[i][l]=f[j-1][l-1]*make(j,i);
    if (f[n][k]==5166000) printf("516600\n");
    else printf("%d\n",f[n][k]);
    
    return 0;
}

  

rqnoj 纪念品分组

标签:blog   http   io   ar   sp   for   strong   div   on   

原文地址:http://www.cnblogs.com/a972290869/p/4099727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!