链接: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阶段的零件。轩轩想知道对于每张工单,他是否需要给别人提供原材料。他 知道聪明的你一定可以帮他计算出来!
第一行两个正整数 ?,? 和 ?,分别表示工人的数目、传送带的数目和工单的数目。 接下来 ? 行,每行两个正整数 ? 和 ?,表示编号为 ? 和 ? 的工人之间存在一条零 件传输带。保证 ? ≠ ?。 接下来 ? 行,每行两个正整数 ? 和 ?,表示编号为 ? 的工人想生产一个第 ? 阶段 的零件。
共 ? 行,每行一个字符串 “Yes” 或者 “No”。如果按照第 ? 张工单生产,需要编号为 1 的轩轩提供原材料,则在第 ? 行输出 “Yes”;否则在第 ? 行输出 “No”。注意输出不含引号。
示例1
3 2 6
1 2
2 3
1 1
2 1
3 1
1 2
2 2
3 2
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
5 5 5
1 2
2 3
3 4
4 5
1 5
1 1
1 2
1 3
1 4
1 5
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 阶段的零件,需要全部工人提供原材料。
共 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。
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;
}