fork download
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. void makeCombiUtil(vector<vector<int> >& ans,
  5. vector<int>& tmp, int n, int left, int k)
  6. {
  7. // Pushing this vector to a vector of vector
  8. if (k == 0) {
  9. ans.push_back(tmp);
  10. return;
  11. }
  12.  
  13. // i iterates from left to n. First time
  14. // left will be 1
  15. for (int i = left; i <= n; ++i)
  16. {
  17. tmp.push_back(i);
  18. makeCombiUtil(ans, tmp, n, i + 1, k - 1);
  19.  
  20. // Popping out last inserted element
  21. // from the vector
  22. tmp.pop_back();
  23. }
  24. }
  25. vector<vector<int> > makeCombi(int n, int k)
  26. {
  27. vector<vector<int> > ans;
  28. vector<int> tmp;
  29. makeCombiUtil(ans, tmp, n, 1, k);
  30. return ans;
  31. }
  32. double getVal(vector<vector<int>>& combi,vector<double>& prob)
  33. {
  34. double sol = 0.0;
  35.  
  36. for(int i = 0 ; i < int(combi.size()) ; i++)
  37. {
  38.  
  39. vector<int> tempV = combi[i];
  40. double temp = 1.0;
  41. int indx = 0;
  42.  
  43. for(int j = 0 ; j < int(prob.size()) ; j++)
  44. {
  45. if(j == tempV[indx]-1){
  46. temp*=prob[j];
  47. indx++;
  48. }
  49. else
  50. {
  51. temp*=(1-prob[j]);
  52. }
  53. }
  54. sol+=temp;
  55. }
  56. return sol;
  57. }
  58. int main() {
  59. // your code goes here
  60. vector<int>temp;
  61. vector<vector<int>>combi;
  62. cout<<"jere"<<endl;
  63.  
  64. int k = 2;
  65. int n = 3;
  66. vector<vector<int> > an = makeCombi(n, k);
  67. for(int i = 0 ; i < an.size() ; i++)
  68. {
  69. for(int j = 0 ; j < an[0].size() ; j++)
  70. {
  71. cout<<an[i][j]<<" : ";
  72. }
  73. cout<<endl;
  74. }
  75. vector<double> prob = {0.4,0.6,0.8};
  76. double sol = getVal(an,prob);
  77. cout<<sol<<endl;
  78. return 0;
  79. }
Success #stdin #stdout 0s 4544KB
stdin
Standard input is empty
stdout
jere
1 :  2 :  
1 :  3 :  
2 :  3 :  
0.464