记录编号 433153 评测结果 AAAAAAAAAA
题目名称 [NOIP 2000J/S]乘积最大 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2017-08-05 00:23:58 内存使用 0.31 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cctype>
  3. #include<algorithm>
  4. using namespace std;
  5. inline long long get();
  6. int n,K;
  7. long long N[41],num[41][41],F[41][41];
  8. int main()
  9. {
  10. freopen("cjzd.in","r",stdin);
  11. freopen("cjzd.out","w",stdout);
  12. n=get();K=get();
  13. for(int i=1;i<=n;i++)
  14. {
  15. N[i]=getchar()-'0';
  16. for(int j=1;j<=i;j++)F[0][i]=(F[0][i]<<3)+(F[0][i]<<1)+N[j];
  17. }
  18. for(int i=1;i<=n;i++)
  19. {
  20. for(int j=i;j<=n;j++)
  21. {
  22. for(int k=i;k<=j;k++)
  23. {
  24. num[i][j]=num[i][j]*10+N[k];
  25. }
  26. }
  27. }
  28. for(int i=2;i<=n;i++)
  29. {
  30. for(int j=1;j<=K;j++)
  31. {
  32. for(int k=j;k<i;k++)
  33. {
  34. F[j][i]=max(F[j][i],F[j-1][k]*num[k+1][i]);
  35. }
  36. }
  37. }
  38. printf("%lld",F[K][n]);
  39. return 0;
  40. }
  41. inline long long get()
  42. {
  43. long long t=0,j=1;char c=getchar();
  44. while(!isdigit(c))
  45. {
  46. if(c=='-')j=-1;
  47. c=getchar();
  48. }
  49. while(isdigit(c))
  50. {
  51. t=(t<<3)+(t<<1)+c-'0';
  52. c=getchar();
  53. }
  54. return j*t;
  55. }