xynuoj1423 贪婪戈尔曼 二维 01背包

1423: 贪婪戈尔曼

时间限制: 1 Sec  内存限制: 128 MB
提交: 12  解决: 4
您该题的状态:已完成
[提交][状态][讨论版][Edit] [TestData]

题目描述

从前有2只狗,大的叫大狗,小的叫小狗,它们2个合起来就是狗儿们,使用英语的人把它们写作Girlman,传来传去,到最后大家决定叫它们格尔曼。它们 的叫声很特别,但是它们十分吝啬它们的叫声,你为了听到它们的叫声,决定买狗饼干送给它们吃,不同种类的饼干能让它们叫的次数不一样,同一块饼干对于大小 格尔曼的效果也不一样。它们很贪婪,如果你只给其中一只格尔曼吃狗饼干或者给两只格尔曼吃的不一样,有一只就会不高兴,因此你买狗饼干的时候总要两块两块 地买,而且现在每类饼干也只有2块(想要多的也没得)。现在不是流行节约型社会吗?因此你也不能浪费,你要求的是在满足你要听格尔曼叫声次数要求的情况 (两只格尔曼实际叫的次数都不小于你的要求即可)下的最小花费是多少。

输入

   输入文件的第一行为3个整数n、s、b,分别表示狗饼干的类数、你想听到的小格尔曼的叫声次数和大格尔曼的叫声次数,接下来有n行,第i+1行有3个整数si、bi、ci,分别表示第i类狗饼干能让小格尔曼叫的次数、能让大格尔曼叫的次数和该类饼干的单价。

1<=n<=1000、1<=s,b<=50、0<=si ,bi ,ci <=2147483647。

输出

输出文件只有一个整数,为满足你的要求情况下的最小花费。

样例输入

5 5 101 2 52 4 103 7 81 11 366 0 18

样例输出

36

提示

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; 
int n,g,h;
int a[1005],b[1005],c[1005];
long long f[51][51];
int main()
{
	int i,j,k,t1,t2;
	memset(f,127,sizeof(f));
	scanf("%d%d%d",&n,&g,&h);
	for(i=0;i<n;i++)
	scanf("%d%d%d",&a[i],&b[i],&c[i]);
	f[0][0]=0;
	for(i=0;i<n;i++)
	{
		for(j=g;j>=0;j--)
		{
			for(k=h;k>=0;k--)
			{
				t1=j+a[i];
				t2=k+b[i];
				if(t1>g)//思维灵活,如果超过则仍算正好 
				t1=g;
				if(t2>h)
				t2=h;
				f[t1][t2]=min(f[t1][t2],f[j][k]+c[i]);//核心代码 
			}
		}
	}
	printf("%lld\n",2*f[g][h]); //注意饼干是每块多少钱,一次要买一对。 
	return 0;
 } 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值