필기시험 스톱. - 톱.
/**
n+1 , 1 2 3...i,
,i pi(1<=pi<=i),
1 ( 1 ),
:
A. i , i+1;
B. i , pi;
n+1 ;
:
n(30% 1<=n<=100,100% 1<=n<=1000), ,
n pi(1<=pi<=i), pi i pi。
:
, , 1000000007 (10e9 + 7) 。
1:
2
1 2
1:
4
1:
1 p1 1, A 2, 2 B 2, A 3, 3 4 。
*/
아이디어는 다음과 같습니다.
dp[i]를 i문에 도달하기 위해 설정하고 진입 횟수가 짝수일 때 이동해야 하는 횟수는 처음에 0이고 두 번째는 1에 들어가야 한다. 제목 때문에 dp[N]-1+1을 요구한다. (빼기 1은 초기 상태가 1에 들어가야 하기 때문에 1짝N->기N+1을 추가한다)
코드는 다음과 같습니다.
#include
#include
#define MAX_N 1005
#define MOD 1000000007
using namespace std;
int dp[MAX_N], pos[MAX_N];
int main()
{
int N;
while(cin>>N)
{
for(int n=1; n<=N; n++)
{
scanf("%d", pos+n);
}
if (N == 1)
{
cout << "1" << endl;
continue;
}
for(int i=1; i<=N; i++)
{
// dp[i] = (dp[i-1]+1)%MOD;// i->i+1
// dp[i] = (dp[i]+1)%MOD;// i->pos[i]
// dp[i] = (dp[i]+((dp[i-1]-(dp[pos[i]-1]+1)+MOD)%MOD))%MOD;// pos[i]-> i-1
// dp[i] = (dp[i]+1)%MOD;// i-1-> i
//
dp[i] = (2 * dp[i - 1] %MOD- dp[pos[i] - 1] + 2) % MOD;
}
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무 중 두 노드의 가장 가까운 공공 조상을 찾다제목: 두 갈래 나무 중 두 노드의 가장 가까운 공공 조상을 찾아 되돌려 달라고 한다. 알고리즘 사상: 이 문제의 관건은 모든 노드에 부모 노드를 가리키는 바늘을 포함하는 데 있다. 이로써 프로그램은 간단한 알고리즘...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.