Szczegółowe omówienie zadania Domek z Kart:
Link do powyższego omówienia zadania Domek z kart:
https://youtu.be/8ChVF4kFsJY?t=827
https://youtu.be/8ChVF4kFsJY?t=827
——-
Link do treści zadania Domek z kart:
https://szkopul.edu.pl/problemset/problem/LdXEESx2SJmtrU_CkvAXwXNh/site
https://szkopul.edu.pl/problemset/problem/LdXEESx2SJmtrU_CkvAXwXNh/site
Link do wszystkich zadań z Olimpiady Informatycznej Juniorów:
https://szkopul.edu.pl/task_archive/oig/
https://szkopul.edu.pl/task_archive/oig/
Zadanie Domek z kart pochodzi z II etap Olimpiady Informatycznej Gimnazjalistów (poprzednika OIJ).
Tym niemniej zadanie jest na poziomie I / II etapu Olimpiady Informatycznej Licealistów.
Tym niemniej zadanie jest na poziomie I / II etapu Olimpiady Informatycznej Licealistów.
——-
Zadanie Domek z kart realizuje programowanie dynamiczne (dynamik) na drzewie.
Jak się uczyć na podstawie tego zadania?
https://youtu.be/QgLyXYmFQeU?t=2019
https://youtu.be/QgLyXYmFQeU?t=2019
——-
–
#include<bits/stdc++.h>
using namespace std;
constexpr int M=1<<17;
int val[M+7];
int dp[M][21];
void compute(int v, int k, int level){
if(!k) return;
dp[v][1]=val[v];
if(level==1) return;
compute(2*v,k-1,level-1);
compute((2*v)+1,k-1,level-1);
for(int i=2; i<=k; i++){
for(int j=0; j<i; j++) dp[v][i]=max(dp[v][i],dp[2*v][j]+dp[2*v+1][i-j-1]+val[v]);
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,k,a,b,v;
cin>>n>>k;
k/=2;
v=0;
for(int i=0; i<n; i++){
for(int j=0; j<(1<<i); j++){
v++;
cin>>a>>b;
val[v]=a+b;
}
}
compute(1,k,n);
cout<<dp[1][k];
return 0;
}
Kod C++ programu Domek z kart, który jest omówiony w powyższym filmie i który otrzymuje 100%