题意:
求不相邻的几个数和最大。
思路:
我们可以用f[j]表示前j个数的最优解,可得动态转移方程f[j]=max(f[j-1],f[j-2]+a[j])。
代码:
#include<cstdio>
int f[100001],a[100001],t,n,ans;
int max(int x,int y) {return x>y?x:y;}
int main()
{
scanf("%d",&t);
for (int i=1;i<=t;i++)
{
scanf("%d",&n);
for (int j=1;j<=n;j++)
{
scanf("%d",&a[j]);
f[j]=max(f[j-2]+a[j],f[j-1]);//要么选中间隔了一个数的,要么不选
}
printf("%d\n",f[n]);
}
}