输出7
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int>p;
vector<long int>sum;
int main()
{
scanf("%d",&n);
int *a=(int*)malloc(n*sizeof(int));
int max,min;
int count=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0; i<(1<<n); i++)
{
for(int j=0; j<n; j++)
{
if(i&(1<<j)&&(i&(1<<(j-1))||i&(1<<(j+1))))
{
p.push_back(a[j]);
}
}
int c=-1;
vector<int>::iterator itMax=p.begin();
for(itMax;itMax!=p.end();itMax++)
{
if(c<*itMax)
c=*itMax;
}
int d=c+1;
vector<int>::iterator itMin=p.begin();
for(itMin;itMin!=p.end();itMin++)
{
if(d>*itMin)
d=*itMin;
}
sum.push_back(c+d);
p.clear();
}
vector<long int>::iterator it=sum.begin();
long int k=-1;
for(it;it!=sum.end();it++)
{
if(k<*it)
k=*it;
}
printf("%ld",k);
return 0;
}
范例都过了,但一运行就显示答案错误
思路是先用二进制法求子集,并判断前一个和后一个元素是否在子集内得到元素连续的子集,将子集存储到vector中,判断完一个子集的最大最小值之和就清空vector,储存下一个子集,功力太浅,想不出比这更好的办法了
运行时长已经无所谓了,看这个都看麻了,只想保证结果正确,希望有人能看看到底什么地方导致结果不对,感谢感谢