pro:有D个字母,每个字母有自己的权值,现状需要用它们拼出N个单词,使得这些单词互相不为另外一个的前缀。 且单词的权值和最小。D<=200; N<=200;

sol:如果建立字典树,那个每个单词的权值权值救赎根到叶子的路径权重和。 感觉有点想哈夫曼树,但是没什么大的关系,因为不能倒推。

由于ND比较小,我们直接贪心,维护一个大小为N+D的数组b[],一直更新,原则如下:每次排序b[],把 b[1]替换为b[1]+a[];一直操作,直到不能再变小为止。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const ll inf=1LL<<;
ll a[maxn],b[maxn];
int main()
{
int N,D;ll ans;
while(~scanf("%d%d",&N,&D)&&(N||D)){
ans=;
rep(i,,D) scanf("%lld",&a[i]);
sort(a+,a+D+);
rep(i,,D) b[i]=a[i];
rep(i,,N) b[i+D]=inf;
rep(i,,N) ans+=b[i];
while(){
rep(i,,D) b[i+N]=b[]+a[i];
b[]=b[N+D];
sort(b+,b+N+D);
ll sum=;
rep(i,,N) sum+=b[i];
if(sum<ans) ans=sum;
else break;
}
printf("%lld\n",ans);
}
return ;
}

当然,也可以DP来做,dp[i][j]表示根有i个儿子,j个叶子时的最小代价。

最新文章

  1. Android 死锁和重入锁
  2. F#之旅1 - Why use F#?为什么要用F#?
  3. Python学习笔记 for windows 二
  4. Wireshark工控协议
  5. 【转】Eclipse Class Decompiler——Java反编译插件
  6. JPG 批量压缩、 PNG32、PNG24转PNG 透明批量压缩工具 【JPNG】 支持多级目录
  7. Linux远程管理
  8. 【转】使用Xcode 6将你的项目本地化
  9. java传输json数据用md5加密过程
  10. mysql命令语句来去除掉字段中空格字符的方法
  11. 《WPF程序设计指南》读书笔记——第8章 依赖属性
  12. Storyboards vs NIB vs Code 大辩论
  13. char图表
  14. DataTable转换成List
  15. matrix67:kmp算法详解
  16. MappedByteBuffer
  17. 网络编程基础【day10】:进程与线程介绍(一 )
  18. 论文阅读:CNN-RNN: A Unified Framework for Multi-label Image Classification
  19. 隔行变色&amp;&amp;鼠标移入变色
  20. mysql为用户开启Trigger的权限

热门文章

  1. Windows下的免安装版MySQL配置
  2. 局域网-断网&amp;劫持(kali)
  3. CentOS7-Docker 配置国内镜像源
  4. CentOS 5 源
  5. [转帖]浅谈分布式一致性与CAP/BASE/ACID理论
  6. 手写MVC框架(一)-再出发
  7. nginx通过自定义header属性来转发不同的服务
  8. Fiddler抓包8-打断点(bpu)(转)
  9. .NET 的程序集加载上下文
  10. loj#10067 构造完全图(最小生成树)