zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/Comfortable/p/10340565.html
Copyright © 2011-2022 走看看