• [dfs] 洛谷 P2535 收集资源


    题目描述

    输入输出格式

    输入格式:

    输出格式:

    输入输出样例

    输入样例#1:
    8 8 10
    1 1 3
    2 2 4
    3 3 5
    3 4 3
    4 3 2
    4 4 6
    5 5 7
    6 6 8
    输出样例#1:
    28

    说明

    数据:

    50%: 1<=N,M,T<=100

    100%: 1<=N,M,T<=200

    题解

    • 由于题目要求我们只用求出可以获得的最大价值,那么我们可直接两两算出红点的距离和代价
    • 然后dfs跑一遍就好了

    代码

     1 #include <cstdio>
     2 #include <cstring>
     3 #define N 210
     4 using namespace std;
     5 __attribute__((optimize("-O3")))
     6 int n,m,T,f[N][N],ans,mn=0x7fffff,mx;
     7 bool vis[N];
     8 struct edge{ int x,y,v; }a[N];
     9 inline int min(int x,int y) { return x>y?y:x; }
    10 inline int max(int x,int y) { return x>y?x:y; }
    11 inline int abs(int x) { return x>0?x:-x; }
    12 inline int read()
    13 {
    14     int x=0,f=1;
    15     char ch=getchar();
    16     while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
    17     while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    18     return x*f;
    19 }
    20 inline void dfs(int d,int x,int t)
    21 {
    22     if ((T-t)/mn*mx+x<=ans) return;
    23     if (t+mn>=T) { ans=max(ans,x); return; }
    24     int o=0;
    25     for (register int i=1;i<=m;++i) if (!vis[i]&&t+f[d][i]<=T) o=1,vis[i]=1,dfs(i,x+a[i].v,t+f[d][i]),vis[i]=0;
    26     if (!o) ans=max(ans,x);
    27 }
    28 int main()
    29 {
    30     n=read(),m=read(),T=read();
    31     for (register int i=1;i<=m;++i) a[i].x=read(),a[i].y=read(),a[i].v=read(),mx=max(mx,a[i].v);
    32     for (register int i=0;i<=m;++i)
    33         for (register int j=i+1;j<=m;++j) f[i][j]=f[j][i]=abs(a[i].x-a[j].x)+abs(a[i].y-a[j].y),mn=min(f[i][j],mn);
    34     if (mn==0) mn=3;
    35     dfs(0,0,0),printf("%d",ans);
    36 }
  • 相关阅读:
    zookeeper 介绍
    多线程、并发及线程的基础问题
    RabbitMQ
    关于JAVA IO流的学习
    SQL 的基本常识
    What is Bt?
    Python turtle库的学习笔记
    字符串简单模式匹配算法与IndexOf方法比较
    谈如何选书
    使用JavaScriptSerializer进行序列化日期类型应该注意的问题
  • 原文地址:https://www.cnblogs.com/Comfortable/p/10340565.html
Copyright © 2020-2023  润新知