Как вывести числа, сумма которых равна максимальной сумме
In the XYZ society, the neighbours hate each other for their attitude. Various activities are organized in the society for Welcoming the New Year. The tickets were provided to each house with an integer written on it. Some got tickets with positive integers and some got tickets with negative integers. In the evening, people had to carry their tickets to the club house where the eligible ones will get the exciting gifts. The eligibility of winning the gift depends on the maximum sum which can be formed from the tickets numbers keeping in mind that neighbours hate each other. Since the neighbours hate each other, the two cannot be together in the list of maximum sum.
Президент общества, мистер Сингх, мудрый человек и знает, что соседи в обществе не любят друг друга. Кроме того, он не хочет становиться плохим перед людьми. Поэтому ему пришла в голову идея разработать программу, которая будет предоставлять список целых чисел, образующих максимальную сумму, и таким образом всем членам списка будут даны подарки. Единственная проблема с этой идеей заключается в том, что он не знает программирования, поэтому он просит вас предоставить правильный список целых чисел. Люди могут быть раздражающими, но умными и будут бороться, если список, предоставленный вами, не образует максимальную сумму.
Примечание: целое число, записанное на билете физических лиц, может быть уникальным, а может и не быть. В случае, когда существует два списка с равной максимальной суммой, будет рассматриваться список с первым большим элементом. Для лучшего понимания обратитесь к объяснению тестового случая 4 в примере тестового случая. Билеты с целым числом 0 не считаются выигрышными подарками.
входной формат
Первая строка входных данных состоит из числа тестовых случаев, т.
Первая строка каждого тестового случая состоит из числа домов (билетов, распределенных) в обществе, N.
Вторая строка каждого тестового случая состоит из N разделенных пробелами билетов с написанным на них целым числом.
Ограничения
1<= T <=10
1<= N <=10000
-1000<= Integer_on_Ticket <=1000
выходной формат
Для каждого тестового случая выведите номера билетов в одну строку, образуя максимальную сумму в формате, аналогичном образцу тестового случая.
Что я уже пробовал:
#include<iostream> using namespace std; void maxsum(int a[], int n); int maxi(int a, int b); int main() { int t,n,i,j; cin>>t; while(t--) { cin>>n; int a[n]; for(i=0; i<n; i++) cin>>a[i]; maxsum(a,n); } return 0; } void maxsum(int a[], int n) { int m[n],max=0,i,x[n],c=0; for(i=0; i<n; i++) x[i]=0; if(a[0]>0) m[0]=a[0]; else m[0]=0; m[1]= maxi(a[1],a[0]); for(i=2; i<n; i++) { m[i]= maxi(m[i-1], m[i-2]+a[i]); max=m[i]; if(max == m[i-1]) { x[c]=i-1; c++; } else { x[c++]=i-2; x[c++]=i; } } //for(i=0; i<n; i++) //{ // if(max<m[i]) // max=m[i]; //} //return max; for(int j=c; j>0; j--) { if(x[j]!=0) cout<<a[x[j]]; } } int maxi(int a, int b) { return (a>b?a:b); }
phil.o
И в чем же заключается ваш вопрос?
Rick York
Вы должны научиться работать с файлами. Гораздо проще ввести тестовые данные в несколько файлов один раз, чем вводить их каждый раз.