zoukankan      html  css  js  c++  java
  • POJ 3257 DP

    题意:
    这里写图片描述
    这里写图片描述
    思路:
    用vector存上本出发点能到的地方&成本&有趣指数(用结构体保存)
    然后DP就好了
    f[i][j]表示到了i 成本为j的有趣指数最大是多少
    f[vec[i][k].end][j+vec[i][k].c]=max(f[vec[i][k].end][j+vec[i][k].c],f[i][j]+vec[i][k].f);

    //By SiriusRen
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int l,n,b,f[1005][1005],ans;
    struct Node{int f,c,start,end;}node[10005];
    vector<Node>vec[1005];
    int main(){
        scanf("%d%d%d",&l,&n,&b);
        for(int i=1;i<=n;i++){
            scanf("%d%d%d%d",&node[i].start,&node[i].end,&node[i].f,&node[i].c);
            node[i].end+=node[i].start;
            vec[node[i].start].push_back(node[i]);
        }
        f[0][0]=1;
        for(int i=0;i<=l;i++){
            for(int j=b;j>=0;j--){
                if(!f[i][j])continue;
                for(int k=0;k<vec[i].size();k++){
                    if(j+vec[i][k].c>b||!f[i][j])continue;
                    f[vec[i][k].end][j+vec[i][k].c]=max(f[vec[i][k].end][j+vec[i][k].c],f[i][j]+vec[i][k].f);
                }
            }
        }
        for(int i=0;i<=b;i++)ans=max(ans,f[l][i]);
        if(!ans)puts("-1");
        else printf("%d
    ",ans-1);
    }

    这里写图片描述

  • 相关阅读:
    基础数据类型转换和深浅拷贝
    文件操作
    运算符相关
    基础数据类型概述
    dijkstra算法学习笔记
    洛谷 P1880 [NOI1995]石子合并
    最大公约数GCD学习笔记
    洛谷 P1280 尼克的任务
    [NOIp2012]疫情控制
    [NOIp2016]蚯蚓
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532230.html
Copyright © 2011-2022 走看看