企业做网站需要租服务器吗温州专业营销网站费用
企业做网站需要租服务器吗,温州专业营销网站费用,海南网站定制,兰州市新闻头条设有 N堆石子排成一排#xff0c;其编号为 1,2,3,…,N。
每堆石子有一定的质量#xff0c;可以用一个整数来描述#xff0c;现在要将这 N 堆石子合并成为一堆。
每次只能合并相邻的两堆#xff0c;合并的代价为这两堆石子的质量之和#xff0c;合并后与这两堆石子相邻的…设有 N堆石子排成一排其编号为 1,2,3,…,N。
每堆石子有一定的质量可以用一个整数来描述现在要将这 N 堆石子合并成为一堆。
每次只能合并相邻的两堆合并的代价为这两堆石子的质量之和合并后与这两堆石子相邻的石子将和新堆相邻合并时由于选择的顺序不同合并的总代价也不相同。
例如有 4 堆石子分别为 1 3 5 2 我们可以先合并 1、2堆代价为 4得到 4 5 2 又合并 1、2堆代价为 9得到 9 2 再合并得到 11总代价为 491124
如果第二步是先合并 2、3 堆则代价为 7得到 4 7最后一次合并代价为 11总代价为 471122。
问题是找出一种合理的方法使总的代价最小输出最小代价。
输入格式
第一行一个数 N 表示石子的堆数 N。
第二行 N 个数表示每堆石子的质量(均不超过 1000)。
输出格式
输出一个整数表示最小代价。
数据范围
1≤N≤300
输入样例
4
1 3 5 2输出样例
22
思路这里明确有个规则只能合并相邻的两堆石子所以为dp问题如果不要求只能合并相邻两堆石子那么就是哈夫曼树的贪心问题。 最后的那一堆也是由相邻的两堆合并而来由此得到问题其实就是考虑两堆石子合并的所有可能fijminfijfikfk1js[j]-s[i-1] 这个循坏就可以算出素有fij的合并中最小的那一个。 完整代码
#include iostream
#include cstring
using namespace std;
const int N 310;
int n, dp[N][N],s[N];int main() {/*memset(dp,0x3f,sizeof dp);memset(s,0,sizeof s);*/cin n;for (int i 1; i n; i){cin s[i];s[i]s[i-1];}for (int len 2; len n; len){for (int i 1; ilen-1 n; i){int jleni-1;dp[i][j]1e8;for(int ki;kj;k){dp[i][j] min(dp[i][k]dp[k1][j]s[j]-s[i-1],dp[i][j]);}}}coutdp[1][n]endl;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91550.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!