#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]<<" "; }