HDU 2851 Lode Runner(简单DP)

来源:互联网 发布:东莞广电网络 编辑:程序博客网 时间:2024/06/06 03:01

比较简单的一道DP题,题意是给你n条路,每条路的最右边有一个梯子,也就是说只要一条路的最右边在另一条路上,那么就可以从这条路去那条路。

一开始没考虑清楚状态怎么表示,TLE了一次。 因为路的最右边从小到大排序,且不能向回走,所以用d[i]表示到大i点的最优解,那么当前这个状态只能由该点之前的某条路也就是某个状态转移过来,所以只要枚举i点之前的所有路就行了,另外注意一下边界。

推荐下一道DP题目:点击打开链接

细节参见代码:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<map>#include<list>#include<cmath>#include<set>#include<queue>using namespace std;typedef long long ll;const long long maxn = 2000 + 5;const int INF = 1000000000;int T,n,m,v,d[maxn];struct node{    int a, b, w;}a[maxn];int main() {    scanf("%d",&T);    while(T--){        scanf("%d%d",&n,&m);        memset(d,0,sizeof(d));        for(int i=1;i<=n;i++) scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].w);            for(int j=1;j<=n;j++) {                d[j] = (j == 1 ? a[j].w : INF);                for(int k=1;k<j;k++) {                    if(a[k].b<=a[j].b&&a[k].b>=a[j].a)                    d[j] = min(d[j],d[k]+a[j].w);                }            }        for(int i=1;i<=m;i++) {            scanf("%d",&v);            if(d[v]!=INF) printf("%d\n",d[v]);            else printf("-1\n");        }    }    return 0;}

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝手弄破了皮怎么办 幼儿喜欢吃手指怎么办 好动的宝贝应该怎么办 幼儿不遵守规则怎么办 幼儿表达不完整怎么办 小孩好动坐不定怎么办 宝宝喜欢用左手怎么办 最近老是做噩梦怎么办 总是做噩梦是怎么办 幼儿总是动手打人怎么办 幼儿爱打人老师怎么办 一岁多宝宝太皮怎么办 小孩会有多动症怎么办 我小孩有多动症怎么办 家有多动症孩子怎么办 4岁宝宝多动症怎么办 四岁宝宝多动症怎么办 一岁宝宝多动症怎么办 5岁宝宝多动症怎么办 7岁宝宝多动症怎么办 小宝宝太调皮了怎么办 3岁宝宝好动怎么办 四岁宝宝好动怎么办 好动的孩子应该怎么办 孩子上课总发呆怎么办 小孩上课发呆走神怎么办 宝宝幼儿园坐不住怎么办 孩孑上课听不懂怎么办 25岁儿子不听话怎么办 幼儿午睡爱说话怎么办 幼儿园实习很累怎么办 怀孕后脚气严重怎么办 拼音a不会写怎么办 儿童7岁还坐不住怎么办 孩子缺锌手蜕皮裂开怎么办 宝宝读幼儿园哭怎么办 幼儿上课爱讲话怎么办 孩子上课总是乱跑怎么办 孩子听不懂老师讲课怎么办 高一上课听不懂怎么办 上课学生纪律差怎么办