博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1155
阅读量:6589 次
发布时间:2019-06-24

本文共 1401 字,大约阅读时间需要 4 分钟。

树形dp 结合01背包

View Code
1 #include
2 #include
3 #define max(a,b) a>b?a:b 4 const int INF = 1000000000; 5 const int maxn = 3010; 6 int head[maxn],dp[maxn][maxn],n,m; 7 int num[maxn]; 8 struct EDGE{
9 int v,w,next; 10 }edge[maxn]; 11 int tot; 12 void add_edge(int s,int t,int w){
13 edge[tot].v=t; 14 edge[tot].w=w; 15 edge[tot].next=head[s]; 16 head[s]=tot++; 17 } 18 void dfs(int u){
19 int i,j,k,tmp[maxn]; 20 for(i=head[u];i!=-1;i=edge[i].next){
21 int v=edge[i].v; 22 dfs(v); 23 for(j=0;j<=num[u];j++) 24 tmp[j]=dp[u][j]; 25 for(j = 0; j <= num[u]; j ++) 26 for(k = 1; k <= num[v]; k ++) 27 dp[u][j+k] = max(dp[u][j+k], tmp[j]+dp[v][k]-edge[i].w); 28 num[u] += num[v];//利用回溯,自底向上的进行DP 29 } 30 } 31 int main(){
32 int i,j,k,a,c; 33 tot=0; 34 memset(head,-1,sizeof(head)); 35 scanf("%d%d",&n,&m); 36 for(i=1;i<=n;i++) 37 for(j=1;j<=n;j++) 38 dp[i][j]=-INF; 39 for(i=1;i<=n-m;i++){
40 scanf("%d",&k); 41 for(j=0;j
=0;i--){
53 if(dp[1][i]>=0){
54 printf("%d\n",i); 55 break; 56 } 57 } 58 return 0; 59 }

转载于:https://www.cnblogs.com/xuschang-93/archive/2012/03/17/2403053.html

你可能感兴趣的文章
java的左移位(<<)和右移位(>>)和无符号右移(>>>)
查看>>
在网页浏览器中原生显示PDF文件
查看>>
升级后开机就提示“android.process.acore”停止执行 --分析 解决方式
查看>>
HTML5 CSS3专题 诱人的实例 CSS3打造百度贴吧的3D翻牌效果
查看>>
OC-内存管理的一些要点
查看>>
Recurrent Neural Network(3):LSTM Basics and 《Inside Out》
查看>>
Linux基础知识-文件管理
查看>>
西窗的雨
查看>>
ubuntu:nodejs安装
查看>>
11月8日PHP练习《留言板》
查看>>
JavaScript学习笔记 1
查看>>
问题007:JDK版本与JRE版本不同导致java.exe执行类文件错误 java.lang.UnsupportedClassVersionError错误...
查看>>
shiro框架 4种授权方式 说明
查看>>
ext2文件系统 - mke2fs
查看>>
Linux Futex的设计与实现(转)
查看>>
Unix环境高级编程(二)文件和目录
查看>>
信号的捕捉与sigaction函数
查看>>
使用Google-Colab训练PyTorch神经网络
查看>>
派 二分水题
查看>>
傅里叶变换
查看>>