题意

n个果园运到2个基地中,要求全部果子都运完,用时为所有路的用时中最大值t1,要求所有运了果子的果园的c之和<=b。

2个基地将会处理所有果子,对于i号果园运到j号基地的w个果子,用时为w*u(u的定义见输入),这部分用时为所有用时的最大值t2。

求min(t2+t1)。

20pts

暴力搜索即可(当然也可以背包)

40pts

简单优化一下背包即可

60pts

这里加上ci,j=1c_{i,j}=1ci,j=1的限制的部分分

考虑对距离加个上限再背包即可

100pts

现在考虑4维 可能也可以理解为5维 的背包

但是好像跑得挺快的

时间复杂度应该是O(ni=1n1aiai+1b2)O(n\sum_{i=1}^{n-1} a_ia_{i+1}b^2)O(ni=1n1aiai+1b2)

因为n=i=1nain=\sum_{i=1}^{n} a_in=i=1nai,所以这玩意在随机数据下应该挺快的

同时我们可以把不生产果子的果园打个不使用的tag,在dp转移时跳过该果园。

当然可以直接删掉,下面写的方程就是这样的

fi,j,k,l,1/0f_{i,j,k,l,1/0}fi,j,k,l,1/0表示已考虑前i个果园,其中第i个果园向一号基地运j吨果子,现在1号基地已开k台机器,2号则开l台机器的最优方案,最后一维为0表示最优方案的运输部分用时,为1表示最优方案的加工部分用时。

现在枚举i,j,k,l,把当前状态转移到前i+1个果园的状态,所以再枚举一个j2表示i+1号果园运j2吨果子去1号基地。

接下来上方程:

fi,j,k,l{<mstyle displaystyle="false" scriptlevel="0">fi+1,j2,k,l+c2,i+1</mstyle><mstyle displaystyle="false" scriptlevel="0">j2==0</mstyle><mstyle displaystyle="false" scriptlevel="0">fi+1,j2,k+c1,i+1,l</mstyle><mstyle displaystyle="false" scriptlevel="0">j2==ai+1</mstyle><mstyle displaystyle="false" scriptlevel="0">fi+1,j2,k+c1,i+1,l+c2,i+1</mstyle><mstyle displaystyle="false" scriptlevel="0">else</mstyle>f_{i,j,k,l}\Rightarrow \begin{cases}f_{i+1,j2,k,l+c_{2,i+1}}&j2==0\\f_{i+1,j2,k+c_{1,i+1},l}&j2==a_{i+1}\\f_{i+1,j2,k+c_{1,i+1},l+c_{2,i+1}}&else\end{cases}fi,j,k,lfi+1,j2,k,l+c2,i+1fi+1,j2,k+c1,i+1,lfi+1,j2,k+c1,i+1,l+c2,i+1j2==0j2==ai+1else

当然上述方程是建立在转移后更优的情况下的。

最后的答案统计非常简单,把fn,j,k,lf_{n,j,k,l}fn,j,k,l扫一遍就行

code