계단 문제: 점차적 + 최적화
제목 대의: 1 계단을 올라갈 때 매번 1-k급을 올라갈 수 있고 지면에서부터 n급까지 올라갈 수 있다. 몇 가지 방안이 있는가.
문제풀이 사고방식1: 소박하고 직관적: O(n*k)1 현재 x급이면 x-1, x-2, x-3에서...x-k, 이 k급 계단이 올라오기 때문에 이중순환으로 매거하면 된다.2 디테일에 주의해야 할 것은 계단은 0에서 시작하여 마이너스가 없다는 것이다.3 모형을 추출하는 것을 기억한다.위 코드:
//luogu1192: :
// :n*k
#include
#define mo 100003
using namespace std;
int n,k,ans=0;
int f[100005];
int main()
{
scanf("%d %d",&n,&k);
memset(f,0,sizeof(f));
f[0]=f[1]=1;
for(int i=2;i<=n;i++)
{
for(int j=max(0,i-k);j
문제풀이 사고방식 2: 관찰 분석과 선형 최적화: O(n)1은 다음과 같은 세 마디를 관찰한다. 현재는 x급이고 x-1, x-2, x-3에서...x-k+2, x-k+1, x-k, 이 k급 계단을 올라오기;현재는 x+1레벨입니다. x, x-1, x-2, x-3에서...x-k+2, x-k+1, 이 k급 계단 올라오기;현재 x+2 레벨, x+1, x, x-1, x-2, x-3에서...x-k+2, 이 k급 계단 올라오기;2 두 번 인접한 많은 연산이 교차하는 것을 발견했는가?3 그리고 다음과 같은 간단한 추산 과정을 얻어낼 수 있다.
식1:a[x]=a[x-1]+a[x-2]+...+a[x-k+1]+a[x-k] ; 식자2:a[x+1]=a[x]+a[x-1]+a[x-2]+...+a[x-k+1] ;
식자1과 식자2에서 식자3:a[x+1]=a[x]*2-a[x-k]를 얻을 수 있다.
식자 3을 한 단계 낮추면 다음과 같이 추산할 수 있다. a[x]=a[x-1]*2-a[x-k-1](x>k일 때 성립)
4x(x-1)의 계단이 x까지 올라갈 수 있기 때문에:
식1:a[x]=a[x-1]+a[x-2]+...+a[0] ; 식자2:a[x+1]=a[x]+a[x-1]+a[x-2]+...+a[0] ;
식자1과 식자2에서 식자3:a[x+1]=a[x]*2를 얻을 수 있다.
식자3을 한 단계 낮추면 다음과 같이 추산할 수 있다. a[x]=a[x-1]*2(x<=k일 때 성립)
5 연산 과정에 마이너스가 있기 때문에 마지막에 마이너스 배제를 해야 한다.
위 코드:
//luogu1192 : +
// O(n)
// , k
// ,
#include
#define mo 100003
using namespace std;
int n,k,ans=0;
int a[100005];
int main()
{
scanf("%d %d",&n,&k);
a[0]=a[1]=1;
for(int i=2;i<=k;i++)
{
a[i]=a[i-1]*2%mo;
}
for(int i=k+1;i<=n;i++)
{
a[i]=a[i-1]*2-a[i-k-1];
a[i]%=mo;
}
printf("%d",(a[n]+mo)%mo);//
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
49일차 - 2022.04.20Baekjoon에서 문제풀이 1) 문제 : 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제/ 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 첫째 줄부터 N번째 줄까지 차례대로 별...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.