fork download
  1. #include <iostream>
  2.  
  3. /*
  4.  Greedy Review
  5.  Se dau o multime A cu m numere intregi nenule si o multime B cu n>=m numere intregi
  6.  nenule. Se cere sa se selecteze un sir cu m elemente din B, x1,x2,...xn such as expresia
  7.  urmatoare sa fie maxima:
  8.  E = a1x1 + a2x2+...anbn
  9.  unde a1, a2, ... an sunt elementele multimii A intr-o anumita ordine pe care trebuie
  10.  s-o determinati.
  11.  
  12. */
  13. int A[100],B[100],m,n,i,
  14. E = 0;
  15.  
  16. void sort(int *p, int size) {
  17. int finished = 0;
  18. while(!finished) {
  19. int swapped = 0;
  20. for(int i = 1; i <= size - 1; i++) {
  21. if(p[i]>p[i+1]){
  22. int aux = p[i];p[i] = p[i+1];p[i+1] = aux;
  23. swapped = 1;
  24. }
  25. }
  26. if(swapped) size--;else finished = 1;
  27. }
  28. }
  29.  
  30. int main(int argc, char const *argv[]) {
  31.  
  32. std::cout<<"m=";
  33. std::cin>>m;
  34. for(i = 1; i <= m; ++i) std::cin>>A[i];
  35. std::cout<<"n=";
  36. std::cin>>n;
  37. for(i = 1; i <= n; ++i) std::cin>>B[i];
  38. sort(A,m);
  39. sort(B,n);
  40. for(i = 1; i <= m; ++i) E += A[i]*B[n-m+1];
  41. std::cout<<"Emax = "<<E;
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0.01s 5456KB
stdin
3
1 2 3
5 
4 5 1 2 3
stdout
m=n=Emax = 18