标签:des mos type \n fir direct make you can
InputThe first line contains an integer TT indicating the total number of test cases.
Each test case starts with an integer nn in one line,
then one line with n−1n−1 integers f(1),f(2),…,f(n−1)f(1),f(2),…,f(n−1).
1≤T≤20151≤T≤2015
2≤n≤20152≤n≤2015
0≤f(i)≤100000≤f(i)≤10000
There are at most 1010 test cases with n>100n>100.OutputFor each test case, please output the maximum coolness of the completed tree in one line.Sample Input
2 3 2 1 4 5 1 4
Sample Output
5 19
因为每种装的范围为【1,+无穷】,然而分组背包的三次方会T,所以要想办法将其转化为完全背包模型。
因为每个点都至少有一度,所以我们预先放入n个一度,本来要放的2×n-2度现在只剩n-2度。
每当再次放入一个x度时,他的贡献为x-1度,在放入的同时减掉之前预先放好的一度。这样便保证了每个点至少有一度。
#include<bits/stdc++.h> #define MAX 2018 #define INF 0x3f3f3f3f using namespace std; typedef long long ll; int a[MAX]; ll dp[MAX]; int main() { int t,n,m,i,j,k; scanf("%d",&t); while(t--){ scanf("%d",&n); for(i=1;i<n;i++){ scanf("%d",&a[i]); } memset(dp,-INF,sizeof(dp)); dp[0]=0; for(i=2;i<n;i++){ for(j=i-1;j<=n-2;j++){ dp[j]=max(dp[j],dp[j-(i-1)]+a[i]-a[1]); } } printf("%I64d\n",dp[n-2]+n*a[1]); } return 0; }
HDU - 5534 Partial Tree(每种都装的完全背包)
标签:des mos type \n fir direct make you can
原文地址:https://www.cnblogs.com/yzm10/p/9735461.html