HDU 5534 Partial Tree
2015 ACM/ICPC 长春现场赛 H题
完全背包
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=2222; int T,N; int a[maxn],dp[maxn]; int cost[maxn],val[maxn]; int tot; int main() { scanf("%d",&T); while(T--) { scanf("%d",&N); tot=0; for(int i=0;i<maxn;i++) dp[i]=-0x7FFFFFFF; dp[0] = 0; for(int i=1;i<N;i++) scanf("%d",&a[i]); for(int i=2;i<=N-1;i++) { cost[tot]=i-1; val[tot++]=a[i]-a[1]; } for(int i=0;i<tot;i++) for(int j=cost[i];j<=N-2;j++) dp[j]=max(dp[j],dp[j-cost[i]]+val[i]); printf("%d\n",dp[N-2]+a[1]*N); } return 0; }