leetcode 629 K Inverse Pairs Array
3051 단어 동적 기획
Given two integers
n
and k
, find how many different arrays consist of numbers from 1
to n
such that there are exactly k
inverse pairs. We define an inverse pair as following: For
ith
and jth
element in the array, if i
< j
and a[i]
> a[j]
then it’s an inverse pair; Otherwise, it’s not. Since the answer may very large, the answer should be modulo 109 + 7.
Example 1:
Input: n = 3, k = 0
Output: 1
Explanation:
Only the array [1,2,3] which consists of numbers from 1 to 3 has exactly 0 inverse pair.
Example 2:
Input: n = 3, k = 1
Output: 2
Explanation:
The array [1,3,2] and [2,1,3] have exactly 1 inverse pair.
Note:
n
is in the range [1, 1000] and k
is in the range [0, 1000]. 이런 n이 있을 때 몇 가지 상황이 존재하는지만 요구하고 구체적인 문제를 일일이 열거할 필요가 없다. 보통 동적 기획 방법을 이용한다.n에서 n+1으로 점차 미루다.분석은 다음과 같다. f(n,k)는 n개의 연속수의 전체 배열에 k개의 역순으로 배열된 수가 있음을 나타낸다.가령 f(n,k)가 0<=s1,s2,......로 구체적으로 표현된다고 가정하면sn<=n, f(n+1,k)는 s1,s2,......, sn 뒤에 n+1을 추가할 수 있다. 그 중에서 n+1>n>=s1,s2,......n, 이때 역순 쌍의 개수를 증가하지 않았습니다. 여전히 k개입니다.마찬가지로 f(n,k-1)의 배열에서 n+1을 마지막 수 앞에 놓으면 역순쌍이 증가하여 n+1의 경우 k개의 역순쌍이 존재한다.시골에서 점차적으로 추진하는 과정에서 n+1의 경우 k의 수치가 n보다 훨씬 클 수 있음을 고려해야 한다. 이때 f(n+1,k)=f(n,k)+f(n,k)+f(n,k-1)+...+f(n,max(0,k-n)). 시간의 복잡도를 낮추기 위해 f(n,k)+f(n,k-1)+...+를 구합니다f(n,max(0,k-n))의 과정에서 이전의 구와 결과를 이용하여 계산할 수 있다.코드는 다음과 같습니다.
public int kInversePairs(int n, int k) {
int mo=1000000007;
int[][] f=new int[1002][1002];
f[1][0]=1;
for (int i=2;i<=n;i++)
{
f[i][0]=1;
for (int j=1;j<=k;j++)
{
f[i][j]=(f[i][j-1]+f[i-1][j])%mo;
if (j>=i) f[i][j]=(f[i][j]-f[i-1][j-i]+mo)%mo;
}
}
return f[n][k];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
01 가방, 완전 가방, 다중 가방 dp(동적 기획 입문 dp)01 가방은 2진법으로 직접 표시할 수 있지만 데이터 양이 너무 많으면 시간을 초과하는 것이 폭력이다.01 가방의 사상은 바로 이 물품에 대해 내가 넣은 가치가 큰지 안 넣은 가치가 큰지 비교하여 방정식 f[i][v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.