64,648
社区成员
发帖
与我相关
我的任务
分享
0 0 0 0 0 0
0 1 1 1 1 1
1 1 0 0 0 0
0 0 0 1 1 1
1 1 1 1 0 0
0 0 0 0 0 1
1 1 1 1 1 1
int f(int m, int n)
{
std::vector<int> r(m+1, -1);
r[0] = 0;
std::queue<int> q;
q.push(0);
while(!q.empty() && r[m] < 0)
{
int t = q.front();
q.pop();
int start = t <= m-n ? 0 : n-m+t;
int end = t >= n ? n : t;
for(int i = start; i <= end; i++)
{
int j = t - i + (n-i);
if(r[j] < 0)
{
r[j] = r[t] + 1;
q.push(j);
}
}
}
return r[m];
}
int calc(int m,int n)
{
if (m<n)
{
printf("input error \n");
return -1;
}
if (m%2==1 && (0==n%2)) // m奇数,n偶数无解
{
printf("no sul \n");
return -2;
}
if (0==m%n)
{
// printf("sul=%d \n",m/n);
return m/n;
}
if ( m-n==1)
{
// printf("sul=%d \n",m);
return m;
}
if (2*n <m) //n<m-n
{
int x = m%n;
int y =m/n;
if (0==n%2)
{
// printf("sul=%d \n",y+1);
return y+1;
}
if (0== (m-n*y)%2)
{
// printf("sul=%d \n",y+2);
return y+2;
}
else
{
// printf("sul=%d \n",y+1);
return y+1;
}
}
else
{
if (0==n%2)
{
// printf("sul=3 \n");
return 3;
}
int total = 2*n-m;
if (0==total%2)
{
// printf("sul=4 \n");
return 4;
}
else
{
// printf("sul=3 \n");
return 3;
}
}
}
int main()
{
int m=0;
int n=0;
while (1)
{
printf("input m,n \n");
scanf("%d,%d",&m,&n);
if (0>=m || 0>=n )
break;
int ret1 =calc(m,n);
int ret2 =f(m,n);
printf("ret1=%d,ret2=%d \n",ret1,ret2);
}
return 0 ;
}