triángulo
La participación de puntos de conocimiento:
solución:
- Mochila es un algoritmo muy clásico problema dp (Si va a aprender dp estudiantes deben aprender problema de la mochila), podemos ver el hormigón mí en el grupo de la mochila nueve tensiones pdf
- Esta pregunta se refiere, podemos hacer una mochila para cada pecho
- Y sólo requiere un tema tomado de cada uno de un cofre, el modo proporcionado DP [i] [j] para el i-ésimo en el pecho de enumeración, la cantidad de dinero disponible es igual al número de programa j
- Entonces ecuación de transferencia es igual a DP [i] [z] + = dp [i-1] [z - a [i] [j]], la inicialización dp [0] [0] = 1
- I i representante de un frente de pecho, z z representante de dinero se puede obtener, el j-ésimo dinero A [i] [j] de la i-ésima representante de pecho enumeración, DP [i] [z] es igual a la i-ésima parte frontal del pecho pueden obtenerse z cantidad de dinero del programa
- gama J de 0 a 10.000, de pequeño a llegar a la dp enumeración definitiva [n] [j], n representa un pecho antes de poder obtener la cantidad de dinero igual al número de programa j, y k continuará haciendo la diferencia para obtener la respuesta
std:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 105;
int a[maxn][maxn],dp[maxn][maxn*maxn],len[maxn];
int main()
{
int n , k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>len[i];
for(int j=1;j<=len[i];j++)
cin>>a[i][j];
}
dp[0][0] = 1;
for(int i=1;i<=n;i++){
for(int z=0;z<=10000;z++){
for(int j=1;j<=len[i];j++){
dp[i][z] += dp[i-1][z-a[i][j]];
}
}
}
ll ans = 0;
for(int i=1;i<=10000;i++){
if(dp[n][i] >= k){
ans += 1ll*k*i;
break ;
}else{
ans += 1ll*dp[n][i]*i;
k -= dp[n][i];
}
}
cout<<ans<<endl;
return 0;
}