zoukankan      html  css  js  c++  java
  • 题目:[stupid]愚蠢的矿工

    题目描述

    背景
    Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步,再向北走3步,向东走3步,再向北走6步,向东走3步,向南走12步,再向西走2步( - -||)就能找到宝藏的入口,而且宝藏都是藏在山里的,必须挖出来,于是Stupid家族派狗狗带领矿工队去挖宝藏.(HYC家的宝藏被狗狗挖走后有什么感想?)

    描述
    这个宝藏的制造者为了掩盖世人耳目,他做的宝藏是没有出口,只有入口,不少建造宝藏的人都死在里面.现在知道宝藏总共有N个分岔口,在分岔口处是有财宝的,每个宝藏点都有一个财富值.狗狗只带了M个人来,而且为了安全起见,在每个分岔口,必须至少留一个人下来,这个留下来的人可以挖宝藏(每个人只能挖一个地方的宝藏),这样才能保证不会迷路,而且这个迷宫有个特点,任意两点间有且只有一条路可通.狗狗为了让他的00开心,决定要尽可能地多挖些宝藏回去.现在狗狗的圈叉电脑不在身旁,只能求救于你了,你要知道,狗狗的终身幸福就在你手上了..(狗狗ps:00,你不能就这样抛弃偶……)

    输入格式

    第1行:两个正整数N,M .N表示宝藏点的个数,M表示狗狗带去的人数(那是一条懒狗,他自己可不做事)。(n<=1000,m<=100)
    第2行:N个整数,第i个整数表示第i个宝藏的财富值.(保证|wi|<maxint)
    第N+2行:两个非负整数A和B,表示A通向B,当A=0,表示A是入口.(保证A,B<=n)

    输出格式

    输出狗狗能带回去的宝藏的价值。

    wa几次了。。。。。。。
    典型的树状DP
    另外,没想到cin与scanf有这么大的差距

    代码实现:

    View Code
     1 #include<iostream>
    2 using namespace std;
    3
    4 int n,m,son[1001][1001]={0},f[1001][3]={0},z[1001][101]={0},a[1001];
    5
    6 void dfs(int k){
    7 int i,j;
    8 if(son[k][0]==0) return ;
    9 f[k][1]=son[k][1];
    10 j=son[k][1];
    11 dfs(j);
    12 for(i=2;i<=son[k][0];i++)
    13 {
    14 f[j][2]=son[k][i];
    15 j=son[k][i];
    16 dfs(j);
    17 }
    18 }
    19
    20 int fenpei(int k,int sum){
    21 int i,max=0;
    22 if(z[k][sum]!=0) return z[k][sum];
    23 if(k==0||sum==0) return 0;
    24 z[k][sum]=a[k];
    25 for(i=1;i<=sum;i++)
    26 {
    27 if(fenpei(f[k][2],i-1)+a[k]+fenpei(f[k][1],sum-i)>max)
    28 max=fenpei(f[k][2],i-1)+a[k]+fenpei(f[k][1],sum-i);
    29 if(fenpei(f[k][2],i)>max)
    30 max=fenpei(f[k][2],i);
    31 }
    32 if(z[k][sum]<max)
    33 z[k][sum]=max;
    34 return z[k][sum];
    35 }
    36
    37
    38 int main()
    39 {
    40 int i,x,y;
    41 scanf("%d %d",&n,&m);
    42 for(i=1;i<=n;i++)
    43 scanf("%d",&a[i]);
    44
    45 for(i=1;i<=n;i++)
    46 {
    47 scanf("%d %d",&x,&y);
    48 son[x][0]++;
    49 son[x][son[x][0]]=y;
    50 }
    51
    52 dfs(son[0][1]);
    53
    54 // for(i=1;i<=n;i++)
    55 // z[i][1]=a[i]; 这个错误害的我查了几个小时的错,快崩溃了!
    56
    57 cout<<fenpei(son[0][1],m)<<endl;
    58
    59 system("pause");
    60 return 0;
    61
    62 }
  • 相关阅读:
    h5 与原生 app 交互的原理
    软件公司各种角色透视图
    软件公司各种角色透视图
    软件公司各种角色透视图
    3大原则让你的编程之路越走越顺
    LeetCode[39]: 组合总和
    20190826
    Oracle介绍
    Welcome to Giyber Blog
    清醒
  • 原文地址:https://www.cnblogs.com/noip/p/2362382.html
Copyright © 2011-2022 走看看