输入n个整数,求最大和,条件:所选的数不能相邻。
递归
#include <stdio.h>
int a[100];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int opt(int n)
{
if(n==0)
{
return a[0];
}
else if(n==1)
{
return max(a[0],a[1]);
}
return max(a[n]+opt(n-2),opt(n-1));
}
int main()
{
int n,i,y;
while(~scanf("%d",&n))
{
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
y=opt(n-1);
printf("%d\n",y);
}
return 0;
}
动态规划
#include <stdio.h>
int a[100];
int d[100];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int dp_opt(int n)
{
int i=0;
d[0]=a[0];
d[1]=max(a[0],a[1]);
for(i=2; i<n; i++)
{
d[i]=max(a[i]+d[i-2],d[i-1]);
}
return d[n-1];
}
int main()
{
int n,i,x,y;
while(~scanf("%d",&n))
{
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
x=dp_opt(n);
printf("%d\n",x);
}
return 0;
}