Am nevoie de ajutor la aceasta problema.Multumesc!
Se citesc doua numere naturale N si K si un sir v de N numere naturale. Sa se raspunda la urmatoarea intrebare:
Cate subsiruri ale sirului initial au suma elementelor egala cu K?
Afisati raspunsul acestei intrebari modulo 999979.
Date de intrare
Fişierul de intrare rucsac.in contine pe prima linie doua numere naturale N si K. Pe cea de-a doua linie se gasesc N numere naturale, reprezentand elementele sirului.
Date de ieşire
În fişierul de ieşire rucsac.out se va gasi pe prima linie un singur numar natural, reprezentand numarul total de subsiruri care au suma elementelor egala cu K.
Restricţii
1 ≤ N ≤ 500
1 ≤ v[i] ≤ 500
1 ≤ K ≤ 250.000
Răspunsuri la întrebare
Răspuns:
Explica#include <stdio.h>
#include <stdlib.h>
#define NMAX 500
#define GMAX 250000
#define MOD 999979
int v[NMAX + 1];
int pret[GMAX + 1];
int main() {
FILE *fin = fopen( "rucsac.in", "r" ), *fout = fopen( "rucsac.out", "w" );
int n, i, G, j;
fscanf( fin, "%d%d", &n, &G );
for ( i = 1; i <= n; i ++ ) {
fscanf( fin, "%d", &v[i] );
}
pret[0] = 1;
for ( i = 1; i <= n; i ++ ) {
for ( j = G; j >= v[i]; j -- ) {
pret[j] += pret[j - v[i]];
if ( pret[j] >= MOD )
pret[j] -= MOD;
}
}
fprintf( fout, "%d", pret[G] );
fclose( fin );
fclose( fout );
return 0;
}ție:
Răspuns:
Hopaaa
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int main()
{
int N,K,v[501],nr=0;
f>>N>>K;
for(int i=1;i<=N;i++)
f>>v[i];
for(int i=1;i<=N;i++)
{
int s=v[i];
if(s==K)
nr++;
else
for(int j=i+1;j<=N;j++)
{
s+=v[j];
if(s==K)
{
nr++;
break;
}
if(s>K)
break;
}
}
g<<nr%99979;
return 0;
}
Explicație:
A mea e mai buna;)