题目1462:两船载物问题

题目描述:

给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品。

输入:

输入包含多组测试数据,每组测试数据由若干行数据组成。
第一行为三个整数,n c1 c2,(1 <= n <= 100),(1<=c1,c2<=5000)。
接下去n行,每行一个整数,代表每个物品的重量(重量大小不大于100)。

输出:

对于每组测试数据,若只使用这两艘船可以装下所有的物品,输出YES。
否则输出NO。

样例输入:
3 5 8
6
3
3
3 5 8
5
3
4
样例输出:
NO
YES
#include <iostream>
#include <cstdio>  
#include <cstring>
using namespace std;

int dp[5003];
int a[103];

int max(int a,int b){
	return a > b ? a: b;
}
int main()  
{  
	int n,c1,c2,sum;
	while(cin >> n >> c1 >> c2){
		sum = 0;
		for(int i = 0;i < n; i++){
			scanf("%d",&a[i]);
			sum += a[i];
		}
		memset(dp,0,sizeof(dp));
		for(int i = 0;i < n;i++)
			for(int j = c1;j >= a[i]; j--){
				dp[j] = max(dp[j],dp[j - a[i]] + a[i]);
			}
       if(sum - dp[c1] > c2)
		   cout << "NO" << endl;
	   else
		   cout << "YES" << endl;
	}
	return 0;  
}  


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值