codeforces 797 E. Array Queries【dp,暴力】

题目链接:codeforces 797 E. Array Queries  

题意:给你一个长度为n的数组a,和q个询问,每次询问为(p,k),相应的把p转换为p+a[p]+k,直到p > n为止,求每次询问要转换的次数。

题解:纯暴力会TLE,所以在k为根号100000范围内dp打表

dp[i][j]表示初始p为i, k为j,需要转换几次可以大于n。

状态转移方程:dp[i][j] = dp[i+a[i]+j] + 1

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

const int N = 1e5+5;
const int M = 320+5;

int dp[N][M];
int a[N];
int n, q;

int main()
{
    int i, j;
    scanf("%d", &n);
    for(i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
    }

    memset(dp, 0, sizeof(dp));
    for(i = n; i >= 1; --i) {//dp , 打表
        for(j = 1; j <= M; ++j) {
            if(i + a[i] + j > n) dp[i][j] = 1;
            else {
                dp[i][j] = dp[i+a[i]+j][j] + 1;
            }
        }
    }

    scanf("%d", &q);
    while(q--) {
        int x, y;
        scanf("%d%d", &x, &y);
        if(y <= 320) printf("%d\n", dp[x][y]);
        else {
            int ans = 0;
            for(int p = x; p <= n; p += a[p]+y) 
                ans++;
            printf("%d\n", ans);
        }
    }
    return 0;
}
posted @ 2017-05-07 14:04  GraceSkyer  阅读(260)  评论(0编辑  收藏  举报

~~~~~~ACM大牛语录,激励一下~~~~~~

为了世界的和平,为了女生的安全,我拼命做题,做题,做题!

用最短的时间,刷最多的题!

给我一滴泪,我就看到了你全部的海洋!

seize the hour, seize the day.

人生难免有无奈,幸福走远了,或是感叹幸福来迟了.其实我一直相信,无论手中的幸福是多么微不足道的感觉,我会把握住那每一分,每一秒,当幸福依旧像那百鸟般飞逝,终究无法掌握时,我会感谢它,曾经降临过!

A自己的题,让别人郁闷去吧

WA肠中过,AC心中留 TLE耳边过,AC特别牛

天然的悲苦和伤逝,过去有过,以后还会有

^*^一步一步往上爬^*^

AC就像练级,比赛就像PK. 练级不如PK好玩

其实,世上本没有ACM,AC的人多了,也便有了!

AC无止尽~ Seek you forever~

找呀找呀找水题,找到一个AC一个呀!

AC是检验程序的唯一标准。

真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血……