# 用大于或等于m的数求和n的不同方法

## 本文概述

``````Input : n = 3, m = 1
Output : 3
Following are three different ways
to get sum n such that each term is
greater than or equal to m
1 + 1 + 1, 1 + 2, 3

Input : n = 2, m = 1
Output : 2
Two ways are 1 + 1 and 2``````

## C ++

``````//CPP Program to find number of ways to
//which numbers that are greater than
//given number can be added to get sum.
#include <bits/stdc++.h>
#define MAX 100
using namespace std;

//Return number of ways to which numbers
//that are greater than given number can
int numberofways( int n, int m)
{
int dp[n+2][n+2];
memset (dp, 0, sizeof (dp));

dp[n + 1] = 1;

//Filling the table. k is for numbers
//greater than or equal that are allowed.
for ( int k = n; k>= m; k--) {

//i is for sum
for ( int i = 0; i <= n; i++) {

//initializing dp[i][k] to number
//ways to get sum using numbers
//greater than or equal k+1
dp[i][k] = dp[i][k + 1];

//if i> k
if (i - k>= 0)
dp[i][k] = (dp[i][k] + dp[i - k][k]);
}
}

return dp[n][m];
}

//Driver Program
int main()
{
int n = 3, m = 1;
cout <<numberofways(n, m) <<endl;
return 0;
}``````

## Java

``````//Java Program to find number of ways to
//which numbers that are greater than
//given number can be added to get sum.
import java.io.*;

class GFG {

//Return number of ways to which numbers
//that are greater than given number can
static int numberofways( int n, int m)
{
int dp[][]= new int [n+ 2 ][n+ 2 ];

dp[ 0 ][n + 1 ] = 1 ;

//Filling the table. k is for numbers
//greater than or equal that are allowed.
for ( int k = n; k>= m; k--) {

//i is for sum
for ( int i = 0 ; i <= n; i++) {

//initializing dp[i][k] to number
//ways to get sum using numbers
//greater than or equal k+1
dp[i][k] = dp[i][k + 1 ];

//if i> k
if (i - k>= 0 )
dp[i][k] = (dp[i][k] + dp[i - k][k]);
}
}

return dp[n][m];
}

//Driver Program
public static void main(String args[])
{
int n = 3 , m = 1 ;
System.out.println(numberofways(n, m));
}
}

/*This code is contributed by Nikita tiwari.*/``````

## Python3

``````# Python3 Program to find number of ways to
# which numbers that are greater than
# given number can be added to get sum.
MAX = 100
import numpy as np

# Return number of ways to which numbers
# that are greater than given number can
# be added to get sum.

def numberofways(n, m) :

dp = np.zeros((n + 2 , n + 2 ))

dp[ 0 ][n + 1 ] = 1

# Filling the table. k is for numbers
# greater than or equal that are allowed.
for k in range (n, m - 1 , - 1 ) :

# i is for sum
for i in range (n + 1 ) :

# initializing dp[i][k] to number
# ways to get sum using numbers
# greater than or equal k+1
dp[i][k] = dp[i][k + 1 ]

# if i> k
if (i - k> = 0 ) :
dp[i][k] = (dp[i][k] + dp[i - k][k])

return dp[n][m]

# Driver Code
if __name__ = = "__main__" :

n, m = 3 , 1
print (numberofways(n, m))

# This code is contributed by Ryuga``````

## C#

``````//C# program to find number of ways to
//which numbers that are greater than
//given number can be added to get sum.
using System;

class GFG {

//Return number of ways to which numbers
//that are greater than given number can
static int numberofways( int n, int m)
{
int [, ] dp = new int [n + 2, n + 2];

dp[0, n + 1] = 1;

//Filling the table. k is for numbers
//greater than or equal that are allowed.
for ( int k = n; k>= m; k--) {

//i is for sum
for ( int i = 0; i <= n; i++) {

//initializing dp[i][k] to number
//ways to get sum using numbers
//greater than or equal k+1
dp[i, k] = dp[i, k + 1];

//if i> k
if (i - k>= 0)
dp[i, k] = (dp[i, k] + dp[i - k, k]);
}
}

return dp[n, m];
}

//Driver Program
public static void Main()
{
int n = 3, m = 1;
Console.WriteLine(numberofways(n, m));
}
}

/*This code is contributed by vt_m.*/``````

## 的PHP

``````<?php

//PHP Program to find number of ways to
//which numbers that are greater than
//given number can be added to get sum.

\$MAX = 100;

//Return number of ways to which numbers
//that are greater than given number can
function numberofways( \$n , \$m )
{
global \$MAX ;
\$dp = array_fill (0, \$n + 2, array_fill (0, \$n +2, NULL));

\$dp [ \$n + 1] = 1;

//Filling the table. k is for numbers
//greater than or equal that are allowed.
for ( \$k = \$n ; \$k>= \$m ; \$k --)
{

//i is for sum
for ( \$i = 0; \$i <= \$n ; \$i ++)
{

//initializing dp[i][k] to number
//ways to get sum using numbers
//greater than or equal k+1
\$dp [ \$i ][ \$k ] = \$dp [ \$i ][ \$k + 1];

//if i> k
if ( \$i - \$k>= 0)
\$dp [ \$i ][ \$k ] = ( \$dp [ \$i ][ \$k ] + \$dp [ \$i - \$k ][ \$k ]);
}
}

return \$dp [ \$n ][ \$m ];
}

//Driver Program
\$n = 3;
\$m = 1;
echo numberofways( \$n , \$m ) ;
return 0;

//This code is contributed by ChitraNayal
?>``````

``3``

### 觉得文章有用就打赏一下文章作者

#### 微信扫一扫打赏 • 回顶