Codeforces Round #239 (Div. 一)(A,B)

Codeforces Round #239 (Div. 1)(A,B)

A 把直角顶点放在原点, 然后让两条直角边斜着放,注意要判断斜边是否与Y轴平行

B dp[i] 表 走到i点i上的X是偶数个的步数

   f[i]表示 从 "在i点时i上的X是奇数个 "变到“在i点时i上的X是偶数个” 所需走的步数

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int i, j;
int dp[1003], f[1003];
int p[1003], n;
const int mod = 1e9+7;
void add(int &a, int b) {
    a += b;
    a %= mod;
}
int main() {
    int i, j;
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
        scanf("%d", &p[i]);
    dp[1] = 1; f[1] = 1;
    for(i = 2; i <= n; i++) {
        for(j = p[i]; j < i; j++)
            add(f[i], f[j]);
        add(f[i], i-p[i]+1);
        add(dp[i], (1+(dp[i-1]+f[i])%mod)%mod);
    }
    printf("%d\n", (dp[n]+1)%mod);
    return 0;
}