前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >纪念品 (牛客数据)2019CSP-J普及组复赛(官方数据)

纪念品 (牛客数据)2019CSP-J普及组复赛(官方数据)

作者头像
韩旭051
发布2022-05-09 08:55:49
3040
发布2022-05-09 08:55:49
举报
文章被收录于专栏:刷题笔记刷题笔记

链接:https://ac.nowcoder.com/acm/contest/2340/D 来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld

题目描述

已替换官方数据

        凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很 神奇。工厂里有 𝑛 位工人,工人们从 1∼𝑛1 \sim 𝑛1∼n 编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带。         如果 𝑥 号工人想生产一个被加工到第 𝐿(𝐿>1)𝐿(𝐿 \gt 1)L(L>1) 阶段的零件,则所有与 𝑥 号工人 有传送带直接相连的工人,都需要生产一个被加工到第 𝐿 −1 阶段的零件(但 𝑥 号工 人自己无需生产第 𝐿 −1 阶段的零件)。         如果 𝑥 号工人想生产一个被加工到第 1 阶段的零件,则所有与 𝑥 号工人有传送 带直接相连的工人,都需要为 𝑥 号工人提供一个原材料。         轩轩是 1 号工人。现在给出 𝑞 张工单,第 𝑖 张工单表示编号为 𝑎𝑖𝑎_𝑖ai​ 的工人想生产 一个第 𝐿𝑖𝐿_𝑖Li​阶段的零件。轩轩想知道对于每张工单,他是否需要给别人提供原材料。他 知道聪明的你一定可以帮他计算出来!

输入描述:

代码语言:javascript
复制
第一行两个正整数 𝑛,𝑚 和 𝑞,分别表示工人的数目、传送带的数目和工单的数目。
接下来 𝑚 行,每行两个正整数 𝑢 和 𝑣,表示编号为 𝑢 和 𝑣 的工人之间存在一条零 件传输带。保证 𝑢 ≠ 𝑣。
接下来 𝑞 行,每行两个正整数 𝑎 和 𝐿,表示编号为 𝑎 的工人想生产一个第 𝐿 阶段 的零件。

输出描述:

代码语言:javascript
复制
共 𝑞 行,每行一个字符串 “Yes” 或者 “No”。如果按照第 𝑖 张工单生产,需要编号为 1 的轩轩提供原材料,则在第 𝑖 行输出 “Yes”;否则在第 𝑖 行输出 “No”。注意输出不含引号。

示例1

输入

复制

代码语言:javascript
复制
3 2 6 
1 2 
2 3 
1 1 
2 1 
3 1 
1 2 
2 2 
3 2

输出

复制

代码语言:javascript
复制
No 
Yes 
No 
Yes 
No 
Yes

说明

编号为 1 的工人想生产第 1 阶段的零件,需要编号为 2 的工人提供原材料。 

编号为 2 的工人想生产第 1 阶段的零件,需要编号为 1 和 3 的工人提供原材料。 

编号为 3 的工人想生产第 1 阶段的零件,需要编号为 2 的工人提供原材料。 

编号为 1 的工人想生产第 2 阶段的零件,需要编号为 2 的工人生产第 1 阶段的零件,需要编号为 1 和 3 的工人提供原材料。 

编号为 2 的工人想生产第 2 阶段的零件,需要编号为 1 和 3 的工人生产第 1 阶段 的零件,他/她们都需要编号为 2 的工人提供原材料。 

编号为 3 的工人想生产第 2 阶段的零件,需要编号为 2 的工人生产第 1 阶段的零 件,需要编号为 1 和 3 的工人提供原材料。 

示例2

输入

复制

代码语言:javascript
复制
5 5 5 
1 2 
2 3 
3 4 
4 5 
1 5 
1 1 
1 2 
1 3 
1 4 
1 5

输出

复制

代码语言:javascript
复制
No 
Yes 
No 
Yes 
Yes

说明

编号为 1 的工人想生产第 1 阶段的零件,需要编号为 2 和 5 的工人提供原材料。 

编号为 1 的工人想生产第 2 阶段的零件,需要编号为 2 和 5 的工人生产第 1 阶段 的零件,需要编号为 1,3,4 的工人提供原材料。 

编号为 1 的工人想生产第 3 阶段的零件,需要编号为 2 和 5 的工人生产第 2 阶段的零件,需要编号为 1,3,4 的工人生产第 1 阶段的零件,需要编号为 2,3,4,5 的工人提供原材料。 

编号为 1 的工人想生产第 4 阶段的零件,需要编号为 2 和 5 的工人生产第 3 阶段 的零件,需要编号为 1,3,4 的工人生产第 2 阶段的零件,需要编号为 2,3,4,5 的工人生产 第 1 阶段的零件,需要全部工人提供原材料。 

编号为 1 的工人想生产第 5 阶段的零件,需要编号为 2 和 5 的工人生产第 4 阶段 的零件,需要编号为 1,3,4 的工人生产第 3 阶段的零件,需要编号为 2,3,4,5 的工人生产第 2 阶段的零件,需要全部工人生产第 1 阶段的零件,需要全部工人提供原材料。 

备注:

代码语言:javascript
复制
共 20 个测试点。 
1≤𝑢,𝑣,𝑎≤𝑛1 \leq 𝑢,𝑣,𝑎 \leq 𝑛1≤u,v,a≤n。 
测试点 1∼41\sim 41∼4,1≤𝑛,𝑚≤10001 \leq 𝑛,𝑚 \leq 10001≤n,m≤1000,𝑞 = 3,𝐿 = 1。 
测试点 5∼85\sim 85∼8,1≤𝑛,𝑚≤10001 \leq 𝑛,𝑚 \leq 10001≤n,m≤1000,𝑞 = 3,1≤𝐿≤101 \leq 𝐿 \leq 101≤L≤10。 
测试点 9∼129\sim 129∼12,1≤𝑛,𝑚,𝐿≤10001 \leq 𝑛,𝑚,𝐿 \leq 10001≤n,m,L≤1000,1≤𝑞≤1001 \leq 𝑞 \leq 1001≤q≤100。 
测试点 13∼1613\sim 1613∼16,1≤𝑛,𝑚,𝐿≤10001 \leq 𝑛,𝑚,𝐿 \leq 10001≤n,m,L≤1000,1≤𝑞≤1051 \leq 𝑞 \leq 10^51≤q≤105。 
测试点 17∼2017\sim 2017∼20,1≤𝑛,𝑚,𝑞≤1051 \leq 𝑛,𝑚,𝑞 \leq 1051≤n,m,q≤105,1≤𝐿≤1091 \leq 𝐿 \leq 10^91≤L≤109。

和LeetCode内部的股票题目很相似~

每次判断是否第二天能回本,回本就买就行了,如果纪念品多的话,就看看买那个利润最多。

代码语言:javascript
复制
typedef long long ll;
using namespace std;
int t,n,m,a[105][105],dp[10005];
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int i,j,k;
    cin>>t>>n>>m;
    for(i=1;i<=t;i++)
    {
        for(j=1;j<=n;j++)
        {
            cin>>a[i][j];
        }
    }//存储数据
    if(t==1)
    {
        cout<<m;
        return 0;
    } //边缘处理
    for(i=1;i<t;i++)//T天
    {
        memset(dp,0,sizeof(dp));
        for(j=1;j<=n;j++)//J种
        {
            if(a[i][j]>=a[i+1][j])//利润否?
            continue;
            for(k=a[i][j];k<=m;k++)//K是价格,价格在资金范围内
            {
                //不买卖的利润或买其他商品的利润  比较  买入再卖出的利润
                dp[k]=max(dp[k],dp[k-a[i][j]]+a[i+1][j]-a[i][j]);
                //原来的资金加上今天的变动算出今天的最大利润
            }

        }
        m=m+dp[m];//dp是利润
    }
    cout<<m;//输出
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入描述:
  • 输出描述:
  • 输入
  • 输出
  • 说明
  • 输入
  • 输出
  • 说明
  • 备注:
  • 和LeetCode内部的股票题目很相似~
  • 每次判断是否第二天能回本,回本就买就行了,如果纪念品多的话,就看看买那个利润最多。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档