域名在线解析株洲seo优化报价
news/
2025/10/2 16:07:58/
文章来源:
域名在线解析,株洲seo优化报价,为网站做外链的文章,个人网站做导购可以吗正题 题目大意 hhh层#xff0c;每层n∗mn*mn∗m个石头#xff0c;挖开不同位置的石头有不同的消耗#xff0c;只能从高层下到低层。有一些宝藏#xff0c;求拿到所有宝藏的最小代价。 解题思路
先考虑只有111层的情况#xff0c;因为挖开的不用再挖 #xff0c;我们可以…正题 题目大意
hhh层每层n∗mn*mn∗m个石头挖开不同位置的石头有不同的消耗只能从高层下到低层。有一些宝藏求拿到所有宝藏的最小代价。 解题思路
先考虑只有111层的情况因为挖开的不用再挖 我们可以发现本题就是一个斯坦纳树我们用SSS状压宝藏的拿取情况。
然后有动态转移方程 fS,x,y{fS′,x,yfS−S′,x,y−ax,y(S′∈S)fS,x−1,yax,yfS,x1,yax,yfS,x,y−1ax,yfS,x,y1ax,yf_{S,x,y}\left\{\begin{matrix} f_{S#x27;,x,y}f_{S-S#x27;,x,y}-a_{x,y}(S#x27;\in S) \\ f_{S,x-1,y}a_{x,y} \\ f_{S,x1,y}a_{x,y} \\ f_{S,x,y-1}a_{x,y} \\ f_{S,x,y1}a_{x,y} \end{matrix}\right.fS,x,y⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧fS′,x,yfS−S′,x,y−ax,y(S′∈S)fS,x−1,yax,yfS,x1,yax,yfS,x,y−1ax,yfS,x,y1ax,y 本方程有后效性且与最短路形式较为相似所以我们枚举SSS先计算第一个后跑一遍SPFASPFASPFA即可
然后我们考虑多层时从下往上递推先将fff多开一维表示层。然后我们可以将上层多开一个宝藏点表示是否选择了下层的所有宝藏 然后有递推式fz,1,x,yfz1,2kz11−1,x,yf_{z,1,x,y}f_{z1,2^{k_{z1}1}-1,x,y}fz,1,x,yfz1,2kz11−1,x,y codecodecode
#includecstdio
#includecstring
#includealgorithm
#includequeue
#define ll long long
using namespace std;
const ll dx[4]{1,-1,0,0},dy[4]{0,0,1,-1},N15,M110;
ll h,n,m,g[N][N][N],f[N][M][N][N],ans,a[N][N][N],k[N];
bool v[N][N];
queueint qx,qy;
void Spfa(ll z,ll s)
{for(ll x1;xn;x)for(ll y1;ym;y)qx.push(x),qy.push(y),v[x][y]1;while(!qx.empty()){ll xqx.front(),yqy.front();qx.pop();qy.pop();for(ll i0;i4;i){ll zxxdx[i],zyydy[i];if(zx1||zy1||zxn||zym) continue;if(f[z][s][x][y]a[z][zx][zy]f[z][s][zx][zy]) continue;f[z][s][zx][zy]f[z][s][x][y]a[z][zx][zy];if(!v[zx][zy]){v[zx][zy]1;qx.push(zx);qy.push(zy);} }v[x][y]0;}
}
int main()
{freopen(treasure.in,r,stdin);freopen(treasure.out,w,stdout);scanf(%lld%lld%lld,h,n,m);for(ll i1;ih;i)for(ll j1;jn;j)for(ll k1;km;k)scanf(%lld,a[i][j][k]);memset(f,127,sizeof(f));memset(f[h1],0,sizeof(f[h1]));for(ll z1;zh;z){scanf(%lld,k[z]); for(ll i0;ik[z];i){ll x,y;scanf(%lld%lld,x,y);g[z][x][y]|1i;}}for(ll zh;z1;z--){ll LMS(1k[z1])-1,MS(1k[z]);for(ll i1;in;i)for(ll j1;jm;j)f[z][MSg[z][i][j]][i][j]f[z1][LMS][i][j]a[z][i][j],f[z][g[z][i][j]][i][j]a[z][i][j];MS(1(k[z]))-1;for(ll s0;sMS;s){for(ll i1;in;i)for(ll j1;jm;j){int ls;while(l){l((l-1)s);if(!l) break;if(max(f[z][l][i][j],f[z][s-l][i][j])1e17)f[z][s][i][j]min(f[z][s][i][j],f[z][l][i][j]f[z][s-l][i][j]-a[z][i][j]);}}Spfa(z,s);}}ans1e17;ll MS(1k[1])-1;for(ll i1;in;i)for(ll j1;jm;j)ansmin(ans,f[1][MS][i][j]);printf(%lld,ans);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925062.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!