Sunteți pe pagina 1din 3

#include <iostream>

#include <fstream>
using namespace std;
int dyn[200][200];
int a[200],s[200];

//21.Se citeste n, număr natural și apoi n


numere naturale. Se cere să se
//afișeze cea mai mare sumă care se poate
forma cu numere din cele n
//(fiecare număr se ia o dată maxim), sumă
divizibiă cu n. Afișați
//numerele care compun suma

void dp(int a[], int n){


// int j=n;
// int i=n;
// int cn=n;
// // dyn[i][j] - cea mai mare suma care
are restul j la impartirea la imp cu n
// if(i == 0 && j == 0) dyn[i][j] = 0;
// else{
// dyn[i][j]=dyn[n-1][j];
// dyn[i][(j+a[i])%n]=max(dyn[i]
[(j+a[i])%n], dyn[i-1][j] + a[i]);
// }
int maxx;
int i,im,jm;
maxx = a[i];
for(i=1;i<=n;i++)
{
s[i]=a[i];
if(s[i]<s[i-1]+a[i]) s[i]=s[i-
1]+a[i];
if(s[i]>maxx && s[i] == 0)
{ maxx=s[i];
jm=i;
}
}
cout<<maxx<<endl;
im=jm;
while(im>0 && s[im]>=0) im--;
im++;
for(i=im;i<=jm;i++) cout<<a[i]<<"
";
}

int main()
{
int n;
cin>>n;

for(int i = 1; i <= n; i++)


cin>>a[i];

dp(a,n);

return 0;

S-ar putea să vă placă și