Problem A: 聪明的田鼠
题解:
dp[k][i]表示走了k步,且在第i行的最大值
最后的结果就是走了n+m-2步,且在第n行的值
代码:
1 #include
Problem B: 软件安装
题解:
线段树区间更新,区间查询
代码:
1 #include
Problem C: V型积木
题解:
最长上升子序列,枚举每个最为最低点,分别求左右两边的LIS,复杂度n³
不过学长说可以用树状数组,nlogn就能解决,万能的树状数组。。
代码:
1 #include
Problem D: 最佳地址
题解:
最小费用流,建立一个超级源点s和超级汇点t
coal0表示原有的发电厂,coal1表示当前要新建的发电厂
从s到coal0连一条流量为b,费用为0的边
从s到coal1连一条流量为sum-b,费用为0的边 因为题目说了全部供应,所以剩下的所有煤矿都要供应到新发电厂
然后coal0和coal1都分别和每个煤矿相连,流量就是煤矿的产量a[i],费用就是c[0][i]和c[1][i]
最后每个煤矿再连接到t,流量为a[i],费用为0
然后跑一下最小费用流就可以了
点的标号分别为0-m-1为煤矿 m为coal0 m+1为coal1 m+2为s m+3为t 一共m+4个点
代码:
1 #include
Problem E: 寻宝
题解:
从0点(题目中的1,习惯从0开始,所以全都-1计算)跑一下改进版dijkstra
当然求的不是最短路,d[i]表示从0到i的所有路线中 每条路线中的权重最小的值 的最大值
这个只要稍微修改一下就好了
c[i]存的就是有c[i]个宝藏地点 可以携带i个宝藏到达那里,因为最多有k个宝藏,所以超过k的也按k算
最后贪心模拟一下就好了
代码:
1 #include