[题目链接]

http://poj.org/problem?id=3345

[算法]

树形背包

[代码]

#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <stack>
#include <limits.h>
using namespace std;
#define MAXN 210
const int INF = 2e9; int i,j,k,root,n,m,tot,u,v,x,ans;
int size[MAXN],fa[MAXN],val[MAXN];
int f[MAXN][MAXN];
char s[MAXN];
map< string,int > mp;
vector< int > e[MAXN]; inline void dp(int u)
{
int i,j,k,v;
f[u][] = ;
size[u] = ;
for (i = ; i < (int)e[u].size(); i++)
{
v = e[u][i];
dp(v);
size[u] += size[v];
for (j = size[u]; j >= ; j--)
{
for (k = ; k <= size[v]; k++)
{
f[u][j] = min(f[u][j],f[u][j - k] + f[v][k]);
}
}
}
if (u != root) f[u][size[u]] = min(f[u][size[u]],val[u]);
} int main()
{ while (scanf("%s",&s) != EOF && strcmp(s,"#") != )
{
scanf("%d",&m);
n = ;
for (i = ; s[i] != '\0'; i++) n = n * + s[i] - '';
tot = ;
mp.clear();
memset(val,,sizeof(val));
memset(fa,,sizeof(fa));
for (i = ; i <= n; i++) e[i].clear();
for (i = ; i <= n; i++)
{
scanf("%s%d",&s,&x);
if (!mp[s]) mp[s] = ++tot;
u = mp[s];
val[u] = x;
while (getchar() != '\n')
{
scanf("%s",&s);
if (!mp[s]) mp[s] = ++tot;
v = mp[s];
e[u].push_back(v);
fa[v] = u;
}
}
root = ;
for (i = ; i <= n; i++)
{
if (!fa[i])
e[root].push_back(i);
}
memset(size,,sizeof(size));
memset(f,0x3f,sizeof(f));
dp(root);
ans = INF;
for (i = m; i <= n; i++) ans = min(ans,f[][i]);
printf("%d\n",ans);
} return ; }

最新文章

  1. 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)
  2. POJ 2186 Popular Cows(Targin缩点)
  3. 搭建域服务器和DNS
  4. WVS简单使用
  5. metaspace之三--Metaspace解密
  6. DOM浏览器文档模型
  7. Hadoop学习之编译eclipse插件
  8. MyBatis good
  9. ORACLE11G RAC 施加以分离不同的实例.TAF
  10. winform自动更新并实现文件的批量异步下载
  11. Nginx配置同一个域名同时支持http与https两种方式访问
  12. 【JS】 Javascript与BOM的互动 寻路
  13. Bigtable:A Distributed Storage System for Strctured Data
  14. ZOJ - 2423-Fractal
  15. python爬虫积累(一)--------selenium+python+PhantomJS的使用(转)
  16. 如何在Vue项目中使用vw实现移动端适配(转)
  17. Volley 结合GSON或FastJson用法
  18. 外网电脑配置8G运行内存,运行Android Studio,速度很轻松
  19. POJ 2242
  20. js的语言的理解

热门文章

  1. Last-Modified If-Modified-Since ETag If-None-Match
  2. windows下查看端口进程占用情况
  3. 《Linux程序设计》笔记(二)shell程序设计
  4. 时序分析:KMP算法用于序列识别
  5. 在jboss上部署web应用
  6. react获取url查询参数
  7. Java 将要上传的文件上传至指定路径代码实现
  8. 【转载】Java IO基础总结
  9. 【剑指Offer】50、数组中重复的数字
  10. C#那20道题