Gegeben drei ganzen Zahlen n
, k
und d
, wie viele Arten kann n
als Summe der positiven ganzen Zahlen dargestellt werden i<=k
, so dass d
mindestens einmal in der Summe auftritt. Es wird garantiert, dass 0<d<=k
. Mein Ansatz war rekursiv;effiziente Art und Weise Anzahl von Summen zu finden möglich
#include <stdio.h>
#include <stdlib.h>
int n,k,d,ans=0;
void solve(int totw,int flag)//totw is the total sum till now, and flag is to keep track of the number of d's in the sum.
{
if(totw>n)
return;
if(totw==n && flag>0)//flag>0--->at least 1 d
{
ans = (ans+1)%1000000007;//answer is expected modulo 10^9+7
return;
}
int i=1,h=k;
if(h>n-totw)
h=n-totw;
while(i<=h)
{
if(i==d)
flag++;
solve(totw+i,flag);
i++;
}
}
int main()
{
scanf("%d %d %d",&n,&k,&d);
solve(0,0);
printf("%d",ans);
}
Eingang:
Ausgang:
Aber der Richter zeigt Time Limit Exceeded
. Gibt es in diesem Fall einen effizienteren Algorithmus? 0<n,k<=100
PS: Ich habe mich nur gefragt, ob es ein kombinatorisches Argument gibt, das diese Frage ohne oder iteration
lösen kann. Und ja .... Reihenfolge der SummenAngelegenheit.
Constraints für n und k? – SergeyS
@SergeyS '0
yobro97
Nicht sicher, ob ich richtig verstanden habe, aber nicht das Problem ist wie die Berechnung der Anzahl der Möglichkeiten (nd) kann als eine Summe von Ganzzahlen dargestellt werden, wobei i <= k -1? –