Gym Class

本文介绍了一个有趣的体育课排队问题,需要在满足特定条件的前提下,通过拓扑排序和优先队列来实现队伍排列,以获得最高的评分。具体实现中,利用优先队列确保每次选取未被约束的最大值。

 

众所周知,度度熊喜欢各类体育活动。 

今天,它终于当上了梦寐以求的体育课老师。第一次课上,它发现一个有趣的事情。在上课之前,所有同学要排成一列, 假设最开始每个人有一个唯一的ID,从1到NN,在排好队之后,每个同学会找出包括自己在内的前方所有同学的最小ID,作为自己评价这堂课的分数。麻烦的是,有一些同学不希望某个(些)同学排在他(她)前面,在满足这个前提的情况下,新晋体育课老师——度度熊,希望最后的排队结果可以使得所有同学的评价分数和最大。 

Input

第一行一个整数TT,表示T(1≤T≤30)T(1≤T≤30) 组数据。 

对于每组数据,第一行输入两个整数NN和M(1≤N≤100000,0≤M≤100000)M(1≤N≤100000,0≤M≤100000),分别表示总人数和某些同学的偏好。 

接下来MM行,每行两个整数AA 和B(1≤A,B≤N)B(1≤A,B≤N),表示ID为AA的同学不希望ID为BB的同学排在他(她)之前。你可以认为题目保证至少有一种排列方法是符合所有要求的。 

Output

对于每组数据,输出最大分数 。

Sample Input

3
1 0
2 1
1 2
3 1
3 1

Sample Output

1
2
6

 

题解:

   这道题目求最大的分数。拿一个用例解释一下给你们看看。

 3 1 

 3 1

 第一个 3 1表示3个数,1一个要求,第二个3 1表示1不能在3前面。所以可能的情况有 2 3 1或者3 2 1,前面求得值为 2 + 2 + 1 = 5,后面为 3+2+1=6.故最大为6;

 在这里我们想到一个问题,解决掉他,就可以AC掉这个题目。

 比如没有任何要求的情况下,1 2 3 4 5去求最大分数,最大为多少?

 最大应该是 5 4 3 2 1(队列的情况)值为 5+4+3+2+1 = 15.最大为15.

(为什么是上面的呢?为什么第一个一点要是最大的呢?假如不是是一个4的话,那么5在后面的任何一个位置他的值最大为 4 + 4 + 3 + 2 + 1,此时5在2号位置。)

 

我们就有了下面的一句总结:

     我们选择首先选择大的去,之后选择小的。如果存在关系的话,就先把没有关系的按照大到小去选择,之后去掉相应关系,再把没有入过的边,在按照从大到小选择。

 

思路:

         就是按照拓扑排序解决掉。

        但是考虑到题目实际的要求就是我们每一次就是出的都是不含关系的队列中的最大值的那个,所以我们使用优先队列就AC掉。

 

代码采用:

     优先队列 + 拓扑排序(题目时间要求太严了!没办法)

 

代码属于转载,注明来源地址:https://www.2cto.com/kf/201608/541773.html

代码如下:

#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
int head[120000];
struct node{
    int to,next;
    operator friend const
}dian[120000];
int shu[120000];
int main()
{
    int t;scanf("%d",&t);
    for (int ca=1;ca<=t;ca++)
    {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;i++)
        {
            head[i]=-1;
            shu[i]=0;
        }
        int a,b;
        while (m--)
        {
            scanf("%d%d",&a,&b);
            dian[m].to=b;
            dian[m].next=head[a];
            head[a]=m;
            shu[b]++;
        }
        priority_queue<int> que;
        for (int i=1;i<=n;i++)
        if (shu[i]==0)
        que.push(i);
        __int64 ans=0;
        int lp=120000000;
        while (!que.empty())
        {
            a=que.top();
            que.pop();
            lp=min(lp,a);
            ans+=lp;
            for (int j=head[a];j!=-1;j=dian[j].next)
            {
                b=dian[j].to;
                shu[b]--;
                if (shu[b]==0)
                que.push(b);
            }
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

 

### Gym 环境使用指南 #### 简介 OpenAI Gym 是一个广泛使用的强化学习工具包,提供了多种环境用于开发、测试和比较强化学习算法。它支持多种编程框架,如 TensorFlow 和 Theano,且不依赖于具体的算法实现。Gym 的设计目标是提供一个统一的接口,使得研究人员和开发者可以方便地测试新的算法并进行实验 [^2]。 #### 安装与配置 在大多数情况下,Gym 可以通过 pip 安装: ```bash pip install gym ``` 如果使用的是 Windows 系统,并希望安装某些特定的依赖(如 Atari 游戏环境),可以使用以下命令: ```bash pip install --no-index -f https://github.com/Kojoley/atari-py/releases atari_py ``` 这样可以解决 Gym 在 Windows 上的兼容性问题,尤其是对于那些依赖于 Atari 环境的游戏 [^3]。 #### 环境的使用 Gym 提供了丰富的环境接口,用户可以通过简单的 API 调用来创建和操作环境。例如,创建一个 CartPole 环境: ```python import gym env = gym.make('CartPole-v1') observation = env.reset() for _ in range(1000): env.render() action = env.action_space.sample() # 随机选择一个动作 observation, reward, done, info = env.step(action) if done: observation = env.reset() env.close() ``` 以上代码展示了如何创建一个环境、重置环境状态、执行随机动作以及渲染环境。Gym 的核心设计思想是提供一个标准化的接口,使得用户可以轻松地与环境进行交互 [^1]。 #### 自定义环境 除了使用 Gym 提供的标准环境外,用户还可以自定义环境。自定义环境需要继承 `gym.Env` 类,并实现 `reset` 和 `step` 方法。以下是一个简单的自定义环境示例: ```python import gym from gym import spaces class CustomEnv(gym.Env): metadata = {'render.modes': ['console']} def __init__(self): super(CustomEnv, self).__init__() self.action_space = spaces.Discrete(2) self.observation_space = spaces.Box(low=0, high=1, shape=(1,), dtype=np.float32) def step(self, action): reward = 1.0 done = True return self.state, reward, done, {} def reset(self): self.state = np.array([0.5]) return self.state def render(self, mode='console'): print(f"Current state: {self.state}") def close(self): pass ``` 通过这种方式,用户可以根据自己的需求定义新的环境,并将其集成到 Gym 的生态系统中 [^1]。 #### 常见问题与解决方案 1. **环境无法渲染**:确保已经正确安装了所有依赖库,尤其是对于图形渲染环境(如 Atari)。 2. **Windows 上的兼容性问题**:使用第三方发布的 wheel 文件来安装某些特定的依赖。 3. **环境版本问题**:不同版本的 Gym 可能会提供不同的环境,建议使用 `gym.__version__` 来检查当前安装的版本。 #### 扩展功能 Gym 还支持与其他工具和库的集成,例如 Stable Baselines3、RLlib 等强化学习框架。这些工具可以帮助用户更高效地开发和测试强化学习算法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值