Приведена матрица AxB с целыми числами> = 0. Сумма каждого столбца матрицы не должна уменьшаться при перемещении слева направо. Кроме того, сумма B я колонка (последняя колонка) меньше или равна A.Устройства со следующими условиями:
Найти число различных матриц такого типа для данных А и В.
Я пытался решить используя рекурсию и мемоизация следующего образом-
функции решения()
IS-ll solve(ll i,ll curlevel)
{
if(dp[i][curlevel]!=-1)
return dp[i][curlevel];
if(i<0)
return dp[i][curlevel]=0;
if(curlevel==B)
return dp[i][curlevel]=test(i,c);
if(curlevel>B)
return dp[i][curlevel]=0;
ll ans=0;
for(ll k=i;k>=0;k--)
{
ans+= test(i,A)* solve(k, curlevel+1);
}
return dp[i][curlevel]=ans;
}
тест функции определяются следующим образом- (Это вычисляет нет путей суммы = «суммы» может происходить как сумма отдельных неотрицательных чисел = «мест»)
ll test(ll sum,ll places)
{
if(mem[sum][places] != -1)
return mem[sum][places];
if(sum==0)
return mem[sum][places]=1;
if(places==0)
return mem[sum][places]=0;
ll val=0;
for(ll i=0;i<=sum;i++)
{
val+=test(sum-i,places-1);
}
return mem[sum][places]=val;
}
Этот метод, однако, слишком медленный.
Есть ли более быстрый способ сделать это (может быть, лучше комбинаторику подхода)
Этот вопрос не имеет смысла.Если A = 10 (есть 10 строк), как вы можете иметь столбец, содержащий только неотрицательные числа, сумма которых равна 10 или меньше, если только каждое значение столбца равно 1? –
@ tylerdurden- 0 также можно использовать. Мы можем, например, иметь столбец с 1 '10' и остальные нули. – LTim
Я подозреваю, что это связано с конкурсом http://www.codechef.com/JUNE15/problems/STDYTAB –