洛谷T45045 餐馆

题目背景

铜企鹅是企鹅餐馆的老板,他正在计划如何使得自己本年度收益增加。

题目描述

共有n 种食材,一份食材i需要花ti​小时不间断地进行播种,施肥,直至收获。当然,一份食材i是可以直接卖掉得到wi块钱的。招牌菜共有m种,一份招牌菜 i 需要消耗一定的食材,花Ti小时不间断地来烹饪,叫卖,并最终卖出得到Wi​ 块钱。 整个季度换算下来一共有Tmax​ 小时可供你使用,铜企鹅需要在这期间赚到最多的钱,~这样他才有足够多的钱来steam 剁手,或者氪金手游~。

1.3 格式

输入输出格式

输入格式:

 

第一行一个整数T,表示数据组数。 一行三个整数n; m; ,含义如题所示。 接下来nnn行,每行两个整数tit_{i}ti​;wiw_{i}wi​,含义如题所示。 接下来m行,每行两个整数Ti;Wi,含义如题所示。 接下来m行,每行n个整数,第j个数dj​表示当前招牌菜需要dj​个食材j。

 

输出格式:

 

对于每组数据,输出一行一个整数,表示你所能赚到的最多的钱。

 

输入输出样例

输入样例#1:

3
1 1 48
2 2000
9 21864
54
4 46
17 52
4 36
5 43
16 62
9 31659
1 20431
4 623
1 11961
4 5 3 5
5 4 3 4
3 3 3 3
4 4 5 5
10 0 48
10 41
18 48
2 14
22 65
12 77
7 48
4 85
2 61
24 85
8 34

输出样例#1: 复制

53728
410
1464

今天我们学校模拟了,本帅哥爆零了。不开心,求小姐姐安慰。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int T,n,m,tot; 
long long w[4003],t[4003],dp[5003];
//这是一个多重背包,把每道招牌菜都当成一个背包中的物品,然后就可以了 
long long read(){
	int ret = 0;
	char c;
	c = getchar();
	while(c > '9'||c < '0')
	{
		c = getchar();
	}
	while(c >= '0' && c <= '9'){
		ret = ret * 10 + c - '0';
		c = getchar();
	}
	return ret;
}
int main()
{
	T = read();
	while(T--)
	{
		n = read();
		m = read();
		tot = read();
		for(int i = 1;i <= n;i++)
		{
			t[i] = read();
			w[i] = read();	
		}	
		for(int i = 1;i <= m;i++)
		{
			t[i + n] = read();
			w[i + n] = read();
		}
		for(int i = 1;i <= m;i++)
		{
			for(int j = 1;j <= n;j++)
			{
				int x;
				x = read();
				t[i + n] += x * t[j];
			}
		}
		memset(dp,0,sizeof(dp));
		for(int i = 1;i <= n + m;i++)
		{
			for(int j = t[i];j <= tot;j++)
			{
				dp[j] = max(dp[j],dp[j - t[i]] + w[i]);
			}
		}
		printf("%lld\n",dp[tot]);
	} 
	return 0;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值