| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1204 人关注过本帖
标题:编了一个多小时编不出来,求解
只看楼主 加入收藏
b465513006
Rank: 2
等 级:论坛游民
威 望:1
帖 子:70
专家分:48
注 册:2011-3-18
结帖率:73.33%
收藏
已结贴  问题点数:14 回复次数:18 
编了一个多小时编不出来,求解
由于Acb0y的rp很低,导致每次都被mm拒之门外,因此今天他想先涨涨rp再行动。于是他挑了n家店,例如理发店、美容店、礼品店等,编号为1-n,每当他经过一家店的时候就能增加一定的rp值,且每家店最多只能经过一次。此外他还挑选了m条可供行走的路线(单向的)。起始时Acb0y在校门口(编号为0),他的目的地是ACM实验室(编号为n+1),你能帮我们的老队长算一下他今天rp最大可以涨到多少么(起始rp为0)?
图片附件: 游客没有浏览图片的权限,请 登录注册


Input

  每个输入文件的第一行有两个整数n和m(0< n<= 30,0< m<= 100),第二行里有n个整数di(1 <= i<= n)表示经过店i可以涨di点的rp值(0<= di<= 100)。再接下来有m行,每行有两个整数a b表示从a可以走到b(0<=a,b<=n+1)。

Output

  对于每个输入文件,输出Acb0y能够涨到的最大rp值。

Sample Input


3 5
5 2 2
0 1
0 2
1 4
2 3
3 4


Sample Output


5

Hint

两点之间可能有多条边,且中可能存在环。


搜索更多相关主题的帖子: 美容店 礼品店 实验室 理发店 
2011-07-13 23:31
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
每个输入文件的第一行有两个整数n和m(0< n<= 。。。。
从这边开始就看不明白了
2011-07-14 09:43
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
哪里的ACM ?
程序代码:
#include <stdio.h>

#define MAX_NODES    30

int n;
int max_rp;
int RP[MAX_NODES + 1];
char MAP[MAX_NODES + 2][MAX_NODES + 2];

void Calculate(int node, int rp)
{
    static char path[MAX_NODES + 2];
    int i;
    if(node == n + 1)
    {
        if(max_rp < rp) max_rp = rp;
    }
    for(i = 0; i <= n + 1; i++)
    {
        if(MAP[node][i] == 1 && path[i] == 0)
        {
            path[i] = 1;
            Calculate(i, rp + RP[i]);
            path[i] = 0;
        }
    }
}

int main()
{
    int i, m, f, t;
    scanf("%d%d", &n, &m);
    for(i = 0; i < n; i++)
        scanf("%d", RP + i + 1);
    for(i = 0; i < m; i++)
    {
        scanf("%d%d", &f, &t);
        MAP[f][t] = 1;
    }
    Calculate(0, 0);
    printf("%d\n", max_rp);
    return 0;
}

重剑无锋,大巧不工
2011-07-14 09:44
youngpennyu
Rank: 2
等 级:论坛游民
帖 子:37
专家分:19
注 册:2011-6-13
收藏
得分:0 
回复 3楼 beyondyf
请问path[i]数组的作用是什么?
2011-07-14 15:56
b465513006
Rank: 2
等 级:论坛游民
威 望:1
帖 子:70
专家分:48
注 册:2011-3-18
收藏
得分:0 
回复 3楼 beyondyf
不行啊,当测试数据变为
4 6
5 2 2 2
0 1
0 2
1 4
1 3
2 3
3 4
结果就会变成0啊
2011-07-14 20:51
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 5楼 b465513006
结果是正确的。是你的数据有问题。
你将中间结点变成了4个,那起始结点标号为0, 终点标号为5。而你给的边里没有能到达终点的边,也就是从起点到终点没有通路。所以结果为0。

重剑无锋,大巧不工
2011-07-14 21:04
youngpennyu
Rank: 2
等 级:论坛游民
帖 子:37
专家分:19
注 册:2011-6-13
收藏
得分:0 
以下是引用beyondyf在2011-7-14 21:04:15的发言:

结果是正确的。是你的数据有问题。
你将中间结点变成了4个,那起始结点标号为0, 终点标号为5。而你给的边里没有能到达终点的边,也就是从起点到终点没有通路。所以结果为0。
请问path[i]数组的作用是什么? 没看明白呢~~~~
2011-07-14 22:47
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
path用于记录已经经过的结点,保证每个结点只经过一次,防止陷入环中。

重剑无锋,大巧不工
2011-07-14 23:03
b465513006
Rank: 2
等 级:论坛游民
威 望:1
帖 子:70
专家分:48
注 册:2011-3-18
收藏
得分:0 
回复 6楼 beyondyf
我中间节点没有变啊,我只是增加了一条从三到四的路,这样最大就会变成5+2等于七了啊
2011-07-15 08:35
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 9楼 b465513006

你再仔细阅读一下你题中关于输入数据格式的描述。
你增加的是从一到三的边,不是从三到四的。正确的格式应该是这样:
3 6
5 2 2
0 1
0 2
1 4
1 3
2 3
3 4

重剑无锋,大巧不工
2011-07-15 11:04
快速回复:编了一个多小时编不出来,求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026423 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved