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 }
  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/noip/p/2362382.html
Copyright © 2011-2022 走看看