首页 > 代码库 > rqnoj 纪念品分组
rqnoj 纪念品分组
题目描述
根据NOIP2007普及组第二题衍生的一道题目。
-------------------------------------------------
元旦快到了,校学生会让猪肝负责新年晚会的纪念品发放工作。它购买了很多纪念品,它要把购来的纪念品进行分组。这些纪念品我们用一群数字代表他们,把它们分组后,它们将组成一些新的组合数字。如把【1234】这堆物品分为2组,它们可以是{【12】,【34】;【1】,【234】;【4】,【123】}之类的组合。
-------------------------------------------------
猪肝想要分组后它们组成新的数字,每组的总乘积的值尽量的大,请你帮助它想想办法。
输入格式
第一行两个数:
N(N<40)【为纪念品的表示的数字的位数;】
K(k<n)【为将要把纪念品分为的组数。】
第二行一个数:
M【为纪念品的表示的数字】
输出格式
一个数,可能的最大和
样例输入
样例输出
提交题目 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 纪念品分组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。