La primera pregunta (el árbol que construí manualmente, emmmmm, es un poco tosco. Puedes ver la idea)
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode ( int x) : val ( x) , left ( nullptr ) , right ( nullptr ) {
}
} ;
int ans;
void dfs ( TreeNode* root, int target) {
if ( ! root) return ;
if ( root- > val >= target) ans++ ;
dfs ( root- > left, max ( target, root- > val) ) ;
dfs ( root- > right, max ( target, root- > val) ) ;
}
int solution ( TreeNode* root) {
if ( ! root) return 0 ;
dfs ( root, root- > val) ;
return ans;
}
int main ( ) {
TreeNode* t1 = new TreeNode ( 100 ) ;
TreeNode* t2 = new TreeNode ( 80 ) ;
TreeNode* t3 = new TreeNode ( 70 ) ;
TreeNode* t4 = new TreeNode ( 3 ) ;
TreeNode* t5 = new TreeNode ( 4 ) ;
t1- > left = t2;
t1- > right = t3;
t2- > left = t4;
t2- > right = t5;
cout << "Answer is : " << solution ( t1) << endl;
system ( "pause" ) ;
return 0 ;
}
Segunda pregunta
#include <iostream>
using namespace std;
int solution ( int n) {
if ( n == 1 || n == 0 ) return 1 ;
int a = 1 , b = 1 , ans = 0 , i = 0 ;
while ( i <= n - 2 ) {
ans = ( a + b) % 1000000007 ;
b = a;
a = ans;
i++ ;
}
return ans;
}
int main ( ) {
int n;
cin >> n;
cout << "Answer is : " << solution ( n) << endl;
system ( "pause" ) ;
return 0 ;
}
Tercera pregunta
#include <iostream>
#include <vector>
using namespace std;
int solution ( vector< int > & nums, int E) {
int sums = 0 ;
for ( auto i : nums) sums + = i;
if ( sums < E) return 0 ;
if ( ( sums + E) % 2 == 1 ) return 0 ;
int A = ( sums + E) / 2 ;
vector< int > dp ( A + 1 , 0 ) ;
dp[ 0 ] = 1 ;
for ( auto i : nums) {
for ( int j = A; j >= i; j-- ) {
dp[ j] + = dp[ j - i] ;
}
}
return dp[ A] ;
}
int main ( ) {
int n, E;
cin >> n;
cin >> E;
vector< int > nums ( n, 0 ) ;
for ( int i = 0 ; i < n; i++ ) cin >> nums[ i] ;
cout << "Answer is: " << solution ( nums, E) << endl;
system ( "pause" ) ;
return 0 ;
}