2 条题解

  • 0
    @ 2025-7-11 16:08:27
    #include<bits/stdc++.h>
    using namespace std;
    int a[305][305],n,k;
    int dfs(int x,int y){
    	if(y>x)return 0;
    	if(x==y)return 1;
    	if(y==1)return 1;
    	if(a[x][y]!=-1)return a[x][y];
    	return a[x][y]=dfs(x-y,y)+dfs(x-1,y-1);
    }
    int main(){
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    	memset(a,-1,sizeof(a));
    	scanf("%d%d",&n,&k);
    	printf("%d",dfs(n,k));
    	return 0;
    }
    
    
    • 0
      @ 2022-7-27 11:14:22
      简单dp
      #include<bits/stdc++.h>
      using namespace std;
      long f[1005][1005],i,j,n,m;
      long read()
      {
      	long x=0,f=1;
      	char ch=getchar();
      	while(ch<'0'||ch>'9'){
      		if(ch=='-')f=-1;
      		ch=getchar();
      	}
      	while(ch>='0'&&ch<='9')
      	{
      		x=x*10+(ch-'0');
      		ch=getchar();
      	}
      	return x*f;
      }
      void write(long x) {
      	if(x<0){
      		putchar('-');
      		write(-x);
      		return;
      	}
      	if(x>=10)write(x/10);
      	putchar(x%10+'0');
      }
      int main()
      {
         n=read(),m=read();
         for(i=1;i<=n;i++)f[i][0]=f[i][1]=1;//初始值
         for(i=2;i<=n;i++)
            for(j=2;j<=m;j++)
            {
               f[i][j]=f[i-1][j-1];
               if(i>j)f[i][j]+=f[i-j][j]; //简单的动态转移方程
            }
         write(f[n][m]);
      	return 0;
      }
      • 1

      信息

      ID
      56
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      (无)
      递交数
      161
      已通过
      38
      上传者