Co2y's Blog

腾讯校招软件开发编程题writeup

这次题出的比实习招聘要好,虽然不怎么会。。笔试后感谢大佬给我讲题,在此记录下这几题,题目应该不对,题意是对的。

数字变换

输入4个数,a,b,c,d。每次可以对a,b进行同时加1,活着同时乘2. 问使得a=c,b=d的最小次数,若不能则输出-1。a,b,c,d<10^9

考虑同时加1不改变a和b的差,同时乘2使得a,b之差乘2. 因此根据c,d之差,找到需要乘2的次数。剩下的变换就是+1的次数。

硬币找零

你有很多硬币,价值为1,2,4,8,.. 2^k,每种价值有2个。输入n,问硬币组合成n的方案数。 例如n=6, 输出3. n<10^18

这里n很大,需要从硬币价值的特殊性和刚好2个入手。考虑n的二进制,dp[i][j]表示从低位到第i位,j=0表示无进位的方案数,j=1表示有进位的方案数。

考虑第i位

1
2
3
4
5
6
7
8
9
10
11
12
13
若为1
dp[i][0] += dp[i-1][0]
dp[i][0] += dp[i-1][1]
dp[i][1] += dp[i-1][1]
若为0
dp[i][0] += dp[i-1][0]
dp[i][1] += dp[i-1][0]
dp[i][1] += dp[i-1][1]
初始
dp[0][0] = 1
若n最低位为1 dp[0][1] = 0 否则 dp[0][1] = 1

魔法城市

给定一个n节点的无向图,所有节点都有通路,通路的权值在0-9。另有一个输入k,表示可以用k次魔法使k条边的权值减半,求节点0到节点1的最短路径。 n=100

本题的一个关键在于两两之间有通路,所以从节点0可以走1,2,3…n-1次到节点1.

dp[i][j][k] 表示第i个节点走j步到1,还可以用k次魔法。j从0到n-1.

dp[i][j][k] = dp[其它的i][j-1][讨论k]

总结

算法菜了好多。。秋招没什么动力。。还是得练算法啊:)