Description
你有一个大小为 S S S的 J a b b y Jabby Jabby,每次你可以从你已有的 J a b b y Jabby Jabby中选择一个大小不为 1 1 1的 J a b b y Jabby Jabby,设他的大小为 Q Q Q,然后把它分裂成 a a a和 Q − a Q-a Q−a,其中 1 ≤ a ≤ Q 1\le a\le Q 1≤a≤Q,这样你获得的收益是 a ⋅ ( Q − a ) a\cdot (Q−a) a⋅(Q−a). 给定 S , M S,M S,M,求最少分裂几次才能得到至少 M M M的收益
Input
第一行两个正整数 S , M S,M S,M
( 2 ≤ S ≤ 1000 , 1 ≤ m ≤ 1 0 9 ) (2\le S\le 1000,1\le m\le 10^9) (2≤S≤1000,1≤m≤109)
Output
输出一个非负整数表示答案
如果无法达到 M M M的收益输出 − 1 -1 −1
Sample Input
765 271828
Sample Output
14
Solution
从小到大枚举分离 i i i次,尽可能均分可以使得收益最大,算出最大收益如果不小于 M M M则合法,时间复杂度 O ( S 2 ) O(S^2) O(S2)
Code
#include<cstdio>
using namespace std;
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++)
{
int q=n,res=0,u,v;
for(int j=1;j<=i;j++)
{
u=q/(i-j+2);
v=q-u;
res+=u*v;
q=v;
}
if(res>=m)
{
printf("%d\n",i);
return 0;
}
}
printf("-1\n");
return 0;
}