Bride the prisioners

来源:互联网 发布:公交车 大数据 编辑:程序博客网 时间:2024/06/05 14:33

这里写图片描述
这里写图片描述

/* 释放一个囚犯时,会将牢房分成独立的两个部分,此时所需的金币加上两边的就是总的所需金币数。这是一个递归的思想。这里我们介绍一种新的方法,采取动态规划的套路,d[i][j]表示从i到j,释放所有囚犯所需的最少金币,不含两端i,j当成墙好了,从最小区间慢慢合并成大区间,这样d[0][Q+1]就是所求。[具体的分析请见大神的帖子](http://blog.csdn.net/lizo_is_me/article/details/43735509)*///输入int P,Q,a[_Qmax+2]; //从下标1开始int d[max][max];void solve(){     a[0] = 0;     a[Q+1] = 0;     for(int i=0;i<=Q;i++){         d[i][i+1] = 0;     }     for(int m=2;m<=Q+1;m++)       for(int n=0;n+m<=Q+1;n++){           int j = m + n;           int tmp = _max;           //枚举最初释放的囚犯,计算最小费用           for(int k=n+1;k<j;k++)               tmp = min(tmp,d[n][k]+d[k][j]);           //两边的加完了,还得加释放这个囚犯所需的金币。           tmp += a[j] - a[n] - 2;                     }     return d[0][Q+1];}
原创粉丝点击