整数划分(四)
时间限制: 1000 ms | 内存限制: 65535 KB
难度: 3
- 描述
-
暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷。。亲爱的你能帮帮他吗?
问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积
- 输入
- 第一行是一个整数T,表示有T组测试数据 接下来T行,每行有两个正整数 n,m ( 1<= n < 10^19, 0 < m <= n的位数); 输出
- 输出每组测试样例结果为一个整数占一行 样例输入
-
2111 21111 2
样例输出 -
11121 AC代码:
1 #include
2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 long long dp[20][20],sum,mmax; 8 int n,pp[20]; 9 void dfs(int m,int cot,int p)//深度遍历,去掉注释,更容易看出来;10 {11 if(cot == m)12 {13 sum=1;14 for(int i=0; i<=cot;i++)15 {16 // cout< <<" "< < mmax)20 mmax=sum;21 }22 else for(int i=p ; i >t;34 while(t--)35 {36 memset(dp, 0, sizeof(dp));37 mmax=0;38 cin>>s>>m ;39 int len=strlen(s);40 for(i=0; i