n을 최대 수가 m를 초과하지 않는 수로 나누다
1606 단어 알고리즘과 데이터 구조
여러 정수를 나누면 같은 정수가 존재할 수 있습니다.
dp[n][m]=dp[n][m-1]+dp[n-m][m]dp[n][m]는 정수 n의 구분에서 매 수가 m의 구분수보다 크지 않다는 것을 나타낸다.구분수는 두 가지 상황으로 나눌 수 있다. a. 구분에서 각 수는 m보다 작고 각 수는 m-1보다 크지 않기 때문에 구분 점수는 dp[n][m-1]이다.b. 구분 중 하나가 m이다. 그러면 n에서 m를 빼고 나머지는 n-m를 구분하는 것과 같기 때문에 구분 점수는 dp[n-m][m]이다.
여러 개의 다른 정수를 나누는 경우:
dp[n][m]=dp[n][m-1]+dp[n-m][m-1]dp[n][m]는 정수 n의 구분에서 매 수가 m의 구분수보다 크지 않다는 것을 나타낸다.같은 구분 상황은 두 가지 상황으로 나뉜다. a. 구분 중의 각 수는 m보다 작고 각 수는 m-1보다 크지 않으며 구분 수는 dp[n][m-1]이다.b. 구분 중 하나는 m이다. n에서 m를 빼고 나머지는 n-m를 상당히 구분한다. 그리고 매 수는 m-1보다 크지 않기 때문에 구분 점수는 dp[n-m][m-1]이다.
#include
using namespace std;
int getNum( int n, int m )
{
if( 1 == n || 1 == m )
return 1;
if( n <= m )
return getNum( n, n - 1 ) + 1;
else
return getNum( n, m - 1 ) + getNum( n - m, m );
}
void main()
{
int n, m;
cin >> n >> m;
cout << getNum( n, m ) << endl;
}
예제: 출처계 마늘꾼
구분수는 정수 nn을 00보다 큰 몇 개의 합으로 나누는 것이다.예를 들어 n=4n=4는 1+1+1+11+1+1+1, 1+1+21+1+2, 1+31+3, 2+22+2, 44로 나눌 수 있는데 모두 55가지 방안이 있는데 1+1+21+1+2, 1+2+11+2+1, 2+12+11은 같은 방안으로 여겨진다.
정수 8080의 구분수 방안을 구하다.
ffs는 코드를 붙이지 않고 dp를 사용했다. dp[n][k]는 수 n을 k로 나누고 dp[n][k]=dp[n-1][k-1]+dp[n-k][k]는 1과 1로 나눈다.
#include
using namespace std;
int dp[100][100];
int main()
{
int n;
cin>>n;
dp[0][0]=1;
for(int i=1;i<=n;i++)
dp[i][0]=0;
for(int i=1;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 앞 순서, 중간 순서, 뒤 순서, 깊이 우선 검색, 폭 우선 검색광범위한 우선 검색(Breadth-First-Search)은 루트 노드에서 시작하여 층층이 접근하여 직관적인 생각에 비교적 부합된다.대기열의 선진적인 선출 특성을 사용하여 특정한 층 노드를 방문한 후 이 층 노드를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.