- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分,并分析算法的计算复杂性。
#include stdio.h
#include string.h
#define N 500
#define oo 2000000000
#define MIN(a, b) (a)(b)?(a):(b)
#define MAX(a, b) (a)(b)?(a):(b)
typedef struct { int c, d; } Node;
int n;
int v[N]; // 每堆石头的个数
int save[N]; // 输出最优解的具体合并需要随时改变 v 的值,所以为了同时输出最小,最大的合并,在完成一个任务之后需要回溯
Node f[N][N]; // f[i][j]存储最优解,同时存储合并线索
int sum[N][N]; // sum[i][j] 表示从第 i 堆起,顺时针数j堆的石子总数
void Print(int i, int j) // 递归打印子序列f[i][j]的合并过程
{
int k, x;
if(j != 1) {
Print(i, f[i][j].d); // 倒推子序列 1 的合并过程
x = (i + f[i][j].d - 1)%n + 1;
Print(x, j - f[i][j].d); // 倒推子序列 2 的合并过程
for(k = 1; k = n; k++) // 输出当前合并第i堆和第x堆的方案
if(v[k] 0)
{
if(i == k || x == k) printf(-%d , v[k]); // -号表示这次操作合并该堆
else printf(%d , v[k]);
}
printf(\n);
v[i] = v[i] + v[x]; // 新堆的大小
v[x] = -v[x]; // 置为- 类似于删除
}
}
void Solve(int flag) // flag = 0求最小得分, flag = 1 求最大得分
{
int i, j, k, x, t, result;
for(i = 1; i = n; i++) // 仅含一堆石子的序列不存在合并
f[i][1].c = f[i][1].d = 0;
for(j = 2; j = n; j++) { // 顺推含2堆,3堆...n堆石子的各子序列的合并方案
for(i = 1; i = n; i++) {
t = sum[i][j];
if(flag == 0) f[i][j].c = oo; // 求最小得分,那么需要初始化为 oo
else f[i][j].c = 0; // 求最大得分,那么需要初始化为 0
for(k = 1; k = j-1; k++) {
x = (i + k - 1)%n + 1;
if((flag == 0 f[i][k].c + f[x][j-k].c + t f[i][j].c)
||(flag != 0 f[i][k].c + f[x][j-k].c + t f[i][j].c)) {
f[i][j].c = f[i][k].c + f[x][j-k].c + t;
f[i][j].d = k;
}
}
}
}
result = f[1][n].c; k = 1; // 在子序列f[1][n], f[2][n]...f[n][n]中寻找最优值
for(i = 2; i = n; i++)
if((flag == 0 f[i][n].c res
您可能关注的文档
- 土豆的营养价值有多高.doc
- 土豆红烧肉的家常做法.doc
- 土豆肉丁打卤的做法85.doc
- 土鸡养殖自配料的选择与配制.doc
- 圣德克比萨——做出比萨的精髓.docx
- 圣本珠宝全国招商.doc
- 圣诞广告语MicrosoftWord文档.doc
- 圣诞颂歌威尼斯商人.doc
- 在CAD中怎样给线段测量长度.docx
- 在excel2003中如何使用分级显示.doc
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
最近下载
- 会计学原理23版 英文版课件WildFAP23eCh05PPT.pptx
- 华为公司职类职种职级体系的划分及职业发展通道设计.pdf VIP
- 建筑解析流水别墅.pptx
- 2025届高三英语复习语法填空专题(24张PPT).pptx VIP
- 基于PLC的磨矿控制系统设计.docx
- 有限元分析论文.doc VIP
- 苏教版小学科学五年级上册第四单元《水在自然界的循环》大单元教学设计(含练习).docx
- 聚氯乙烯热收缩膜标签验收标准.doc VIP
- 2023年安徽省高中学业水平合格性考试数学试卷真题(含答案详解) (2).pdf VIP
- 2025届江苏省南菁高级中学物理高一第一学期期中达标检测模拟试题含解析.doc
文档评论(0)