#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <cmath>
using namespace std;
map<int,int>ans;
int dfs(int n)//记忆化搜索
{
int minv=n/2+1;
if(ans.count(n))
{
return ans[n];
}
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
minv=min(minv,((n/i)/2+1)*dfs(i));//i组,求最小值
minv=min(minv,(i/2+1)*dfs(n/i));//每组i人,求最小值
}
}
ans[n]=minv;
return ans[n];
}
int main()
{
int n,m,sum;
while(~scanf("%d%d",&n,&m))
{
sum=dfs(n);
if(sum<=m)
{
puts("Yes");
}
else
{
puts("No");
}
printf("%d\n",sum);
}
return 0;
}
ZOJ-3681 E - Cup 2 dfs
最新推荐文章于 2018-08-12 21:16:06 发布