解题思路:用dp列举所有可能
注意事项:
参考代码:
#include<stdio.h>
#include<string.h>
int a[7];
int number[41];
int book[7];
int n,k;
long long max=0;
int product(int bb[7])
{
int j=1,i,p=1,t;
long long sum=1;
long long s;
t=k;
while(t)
{
s=0;
for(i=j;i<=bb[p];i++)
{
s=s*10+number[i];
}
j=i;
p++;
t--;
sum=s*sum;
}
s=0;
for(i=bb[k]+1;i<=n;i++)
s=s*10+number[i];
return sum*s;
}
//列举出所有乘号的地方
void dfs(int step)
{
int i,flag=1;
long long best;
if(step==k+1)
{
for(i=1;i<=k;i++)
{
if(a[i-1]>a[i])
{
flag=0;
break;
}
}
if(flag)
{
best=product(a);
if(best>max)
max=best;
}
return;
}
for(i=1;i<=n-1;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
return;
}
int main()
{
int i,sz;
char str[41];
scanf("%d %d",&n,&k);
scanf("%s",&str);
for(i=0;i<n;i++)
number[i+1]=str[i]-'0';
//for(i=1;i<=n;i++)
// printf("%d ",number[i]);
dfs(1);
printf("%d\n",max);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复