Post office (区间dp 记忆化搜索) http://acm.zzuli.edu.cn/problem.php?id=1468

来源:互联网 发布:淘宝刷单工作室赚钱吗 编辑:程序博客网 时间:2024/06/02 17:48


从中间向两边推进


dp[x-1][y+1]=dp[x][y]+dist[y]-dist[x];


//
#include<stdio.h>#include<string.h>int dp[1100][1100];int dist[1100];int n;void init(){    int i;    memset(dp,-1,sizeof(dp));    for(i=1;i<=n;i++)    {        scanf("%d",&dist[i]);        dp[i][i]=0;    }        for(i=1;i<n;i++)            dp[i][i+1]=dist[i+1]-dist[i];}int dfs(int x,int y){    if(dp[x][y]!=-1)return dp[x][y];    dfs(x+1,y);//保证每个区间都可以被搜到    dfs(x,y-1);    return dp[x][y]=(dfs(x+1,y-1)+(dist[y]-dist[x]));}void solve(){    dfs(1,n);}int main(){    int x,y,t;    while(scanf("%d",&n)!=EOF)    {        init();        solve();        scanf("%d",&t);        while(t--)        {            scanf("%d%d",&x,&y);            printf("%d\n",dp[x][y]);        }    }    return 0;}


0 0