第二周
1. 三元一次方程
第一种思路
暴力枚举,小学二年级的时候我们就已经知道当 $a + b + c = n$ 时 $c = n - a - b$ 所以只需要枚举 $a, b$ 的值。
要求字典序最小,所以从 a 是第一层循环,依次如此,枚举到第一个答案时就应该退出。
bool flag = false;
for (int x = 0; x * 3 <= n; x ++ )
{
for (int y = 0; y * 5 + x * 3 <= n; y ++ )
{
if ((n - x * 3 - y * 5) % 7 == 0)
{
printf("%d %d %d\n", x, y, (n - x * 3 - y * 5) / 7);
flag = true;
break;
}
}
if (flag) break;
}
if (!flag) puts("-1");
2. 最大差值
第一种思路
因为最优解一定是将一个元素的值全部转移到另一个元素
所以本题可以看成是求一个序列前 $k + 1$ 大的数之和。
3. 边的删减
第一种思路
本题考察的是最短路树
首先用 $Dijkstra$ 求每个点到起点的最短路径(当然用其它最短路算法也行)
睡了~明天写!