/经典算法之 多个数组最大相同和的个数/ /最大相同和:每个数组中最多去掉任意一个元素(含一个都不去),然后对修改后的数组求和,求最多有多少个经过修改后的数组有一样的和/
话不多说,直接放代码!
#include using namespace std;
int main() { int num=0,n=0; int s; int su=0; int sum[100][100],k=0,lastk=0; int str[100][100]; cin>>num;//数组个数 for(int i=0;i<num;i++) { cin>>s;//每一行数的个数 str[i][0]=s; for(int j=1;j<s+1;j++) { cin>>str[i][j];//有效数 } } //求和 for(int i=0;i<num;i++) for(int j=1;j<=str[i][0];j++) { sum[i][0]=str[i][j]+sum[i][0];//所有和 for(int z=1;z<=str[i][0];z++) { if(j!=z) su=su+str[i][z];//去掉其中一个的和 } sum[i][j]=su; su=0; }
//find 第一行每个和与其他行的和相比较,如果有相同的则累计数组个数。 for(int j=0;j<=str[n][0];j++) { k=1; for(int z=n+1;z<num;z++) { for(int c=0;c<=str[z][0];c++) if(sum[n][j]==sum[z][c]) { k=k+1; if(k>lastk)lastk=k; break; } } n++; } cout<<lastk<<endl; return 0; }
样例输入:其中第一行表示数组个数,接下来每一行第一位代表数组元素个数,后面接着是数组元素。 3 3 1 2 3 4 1 2 3 4 4 1 2 3 5
样例输出:求的最大相同和数组的个数 3