最小花费问题,C++高手来帮忙,急!!!

pandalxb 2009-05-16 12:33:51
★问题描述:
某宠物公司给每只宠物都取了一个名字,名字由字母组成,每只宠物的名字
都必须不同。为了方便管理,公司现在需要将每只宠物的名字都刻在铁链上,雕
刻每个字母的费用是不同的,为了减少开支,公司现在请你帮他们的宠物取名字,
使总费用最少。
★实验任务:
对于给定的字母的花费,给n只宠物取名字,使总花费最小。
★数据输入:
第一行有两个整数n(1 <=n <=10000),m(1 <=m <=5000),表示有n只宠物需要
取名,总共有m个字母,接下来一行有m个数表示雕刻每个字母所需的费用,每个
字母的费用不大于100。
★结果输出:
将计算出的最小总花费输出到文件output.txt。
输入示例输出示例
input.txt
4 3
1 2 4
output.txt
8
我要具体的实现代码,谢谢!
给个算法也行。
...全文
431 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltc_mouse 2009-05-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 kingstarer 的回复:]
8是怎么算出来的呢
1
2
1 2
2 1

至少也要9了啊
[/Quote]
呵呵,应该可以是:
1
2
11
12

m的规模看起来较大,但n不大;不过还没有想到什么有效解法...
aaaa3105563 2009-05-17
  • 打赏
  • 举报
回复
帮顶
kingstarer 2009-05-17
  • 打赏
  • 举报
回复
8是怎么算出来的呢
1
2
1 2
2 1

至少也要9了啊
amossavez 2009-05-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pandalxb 的回复:]
没有规定每个字母能用多少次。
[/Quote]
正因为你没有规定每个字母能用多少次,才要用到排列,之后再用堆对和排序
liliangbao 2009-05-17
  • 打赏
  • 举报
回复
帮顶!!
cg05568256068 2009-05-17
  • 打赏
  • 举报
回复
本题可以采用动态规划的做:
首先用dp统计由x1...xm能表示k由多少种,和找硬币问题由点类似
如本题: 1 2 4 则dp结果是 dp[1]=1 dp[2]=2 dp[3]=2 ....
我们取前4个就可以了 1 2 2 3 所以结果是8
hjjdebug 2009-05-17
  • 打赏
  • 举报
回复
贪心算法。
1. 把m个价钱排序。m0<=m1<=m2<=m3...
2. 从m0 开始构建n 个数值。
n0=m0,
n1=2m0<=m1 ? 2m0 : m1
n2=min(3m0 m1, m2)
n3=min(4m0, m1,m2,m3) .... 还要考虑不能重复。 进行n次构建即可。
问题挺复杂,帮顶吧!
pandalxb 2009-05-17
  • 打赏
  • 举报
回复
有谁知道最大最小堆的实现代码的?
hityct1 2009-05-16
  • 打赏
  • 举报
回复
很简单吧。使用哈夫曼编码。
pandalxb 2009-05-16
  • 打赏
  • 举报
回复
m的范围最大可达5000,用排列组合显然不实际。我的这题是在数据结构的堆与优先队列中,应该是用堆或者优先队列实现的吧。有没有人知道算法的?
lylm 2009-05-16
  • 打赏
  • 举报
回复
这个其实有点复杂,要考虑:

1.m个费用的排列数,比如3个取1个排列、3个取2个排列。。。

2.用组合数求和,然后排序

3.排序后序列取前n个的和就是最小总花费
pandalxb 2009-05-16
  • 打赏
  • 举报
回复
没有规定每个字母能用多少次。
yangjianghua 2009-05-16
  • 打赏
  • 举报
回复
2楼很好的思路
zhan1094 2009-05-16
  • 打赏
  • 举报
回复
有没有规定每个字母能使用多少次啊?
pandalxb 2009-05-16
  • 打赏
  • 举报
回复
是啊,和编码问题不一样,比如a,aa可以同时存在的。
hityct1 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hityct1 的回复:]
很简单吧。使用哈夫曼编码。
[/Quote]
sorry,还是有些不同。再考虑一下。
pandalxb 2009-05-16
  • 打赏
  • 举报
回复
这题具体字母没给出,只是给出每个字母的花费。有没有谁再说得具体一点,如何实现,就例题来说。
lpf000 2009-05-16
  • 打赏
  • 举报
回复
帮顶
貌似可以用标准库的排列算法,按字典序产生序列的排列,next_permutation.
pandalxb 2009-05-16
  • 打赏
  • 举报
回复
LS能说下具体的算法是怎样的吗?(对于这题)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧