(2)类似符号三角形问题,可以这样设计范例:
n个数的排列问题或者叫数字三角形问题,或者自己起个名字:已知n个数,第一行是n个数,n个数组成的数字三角形,如图所示。
5 8 6 5 6 8
3 -2 或者 1 2
5 1
下面的数字是上面两个数字的差。求整个三角形的数字之和最大的方案。
#include <iostream>
#include <stdio.h>using namespace std;
int data[] = {6,5,8};
int n = sizeof(data)/sizeof(data[0]);
int used[20];
int bestc=-99999;
int yu(int rt[100],int k)
{
int sumx=0;
while(k>1)
{
for(int i=0;i<k-1;i++)
{
rt[i]=rt[i+1]-rt[i];
sumx=sumx+rt[i];
}
k--;
}
return sumx;
}
int print()
{
int b[100];
int k=0;
int sum=0;
int i,j;
for(i=1;i<=n;i++)
{
for(j=0;j<n;j++)
{
if(used[j]==i)
{
sum=sum+data[j];
b[k++]=data[j];
}
}
}
sum=sum+yu(b,n);
if(sum>bestc)
{
bestc=sum;
}
}
int dfs(int p)
{
if(p>n)
{
print();
return 0;
}
int i = 0;
for(i=0;i<n;i++)
{
if(!used[i])
{
used[i]=p;
dfs(p+1);
used[i]=0;
}
}
}
int main()
{
dfs(1);
cout<<bestc;
return 0;
}