题目内容见zoj1005
由于A,B互素且A的容量小于B,那么可以将B装满并且倒入A中,如果A被装满则将A中的内容全部清空,一直进行下去直到某一刻B中容量恰好等于目标的容量。这种方法能得到正确的结果,但是通常得不到最优结果。
#include <stdio.h>
int main(void)
{
int a,b,target,i;
int curA,curB;
while(scanf("%d %d %d", &a, &b, &target) == 3 )
{
curA = curB = 0;
if(target == b)
{
printf("fill B\n");
}
else if(target % a == 0)
{
for(i = 1; i <= target/a; i++)
{
printf("fill A\n");
printf("pour A B\n");
}
}
else
while(curB != target)
{
curB = b;
/* printf("curB:%d\n",curB);*/
printf("fill B\n");
while(curB >= a-curA)
{
curB -= a-curA;
/* printf("curB:%d\n",curB);*/
printf("pour B A\n");
if(curB == target)
break;
printf("empty A\n");
curA = 0;
}
if(curB == target)
break;
curA += curB;
printf("pour B A\n");
}
printf("success\n");
}
return 0;
}
本文详细介绍了如何通过互素数原理解决ZJOI1005问题,并提供了C++代码实现,展示了从初始状态到目标状态的优化策略。
678

被折叠的 条评论
为什么被折叠?



