标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4957 | Accepted: 2726 |
Description
Input
Output
Sample Input
9 6 3 2 2 3 2 9 3 2 4 2 5 2 3 6 2 7 2 8 2 4 3 3 3 1 1
Sample Output
5
Source
// // main.cpp // hdu4003 // // Created by Candy on 9/23/16. // Copyright ? 2016 Candy. All rights reserved. // #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=3e3+5,INF=1e9; int read(){ char c=getchar();int x=0,f=1; while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1; c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘; c=getchar();} return x*f; } struct edge{ int v,w,ne; }e[N<<1]; int h[N],cnt=0; void ins(int u,int v,int w){ cnt++; e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt; cnt++; e[cnt].v=u;e[cnt].w=w;e[cnt].ne=h[v];h[v]=cnt; } int n,m,k,v,w,val[N],son[N]; int f[N][N]; void dp(int u,int fa){ for(int i=1;i<=n;i++) f[u][i]=-INF; if(u>=n-m+1){f[u][1]=val[u];son[u]=1;return;} for(int i=h[u];i;i=e[i].ne){ int v=e[i].v,w=e[i].w; if(v==fa) return; dp(v,u); son[u]+=son[v]; for(int j=son[u];j>=1;j--) for(int k=1;k<=son[v];k++){ f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]-w); } } } int main(int argc, const char * argv[]) { n=read();m=read(); for(int i=1;i<=n-m;i++){ k=read(); while(k--){v=read();w=read();ins(i,v,w);} } for(int i=n-m+1;i<=n;i++) val[i]=read(); dp(1,0); for(int i=n;i>=1;i--) if(f[1][i]>=0){printf("%d",i);break;} }
标签:
原文地址:http://www.cnblogs.com/candy99/p/5900296.html