hdu 5646 DZY Loves Partition

Posted 下周LGD该赢了吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5646 DZY Loves Partition相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5646

题意:给出n和k,求把n拆成k个不同整数,且这些整数的乘积最大时的乘积,输出时对1e9+7取余。

思路:要乘积最大,可以想到这些拆分成的数是连续的,或者中间隔一个的。先求出一段连续的整数的和与n的差最小,然后把还少的部分x加在前x大的数上去就可以了。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 //#include <bits/stdc++.h>
 5 using namespace std;
 6 int T;
 7 const long long mod = 1e9+7;
 8 int main() 
 9 {
10     scanf("%d", &T);
11     int n, k;
12     while(T--)
13     {
14         scanf("%d%d", &n, &k);
15         if(k >= 44721)
16         {
17             printf("-1\n"); continue;
18         }
19         long long sum = 1+k;
20         sum *= k; sum /= 2;
21         if(sum > n)
22         {
23             printf("-1\n"); continue;
24         }
25         n = n - sum;
26         int l = n/k; int r = n%k;
27         long long ans = 1;
28         for(int i = 1; i <= k-r; i++)
29         {
30             ans = ans*(l+i)%mod;
31         }
32         for(int i = k; i > k-r; i--)
33         {
34             ans = ans*(l+i+1)%mod;
35         }
36         cout<<ans<<endl;
37        
38     }
39     return 0;
40 }

 

以上是关于hdu 5646 DZY Loves Partition的主要内容,如果未能解决你的问题,请参考以下文章

hdu 5646 DZY Loves Partition

hdu 5646 DZY Loves Partition 二分+数学分析+递推

hdu-5645 DZY Loves Balls(水题)

HDU 5647DZY Loves Connecting(树DP)

HDU 5195 - DZY Loves Topological Sorting

hdu5194 DZY Loves Balls 概率论 or 搜索