背包问题(贪心)

题目描述

现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。

输入

第一行输入一个正整数n(1<=n<=5),表示有n组测试数据; 随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品;m表示此背包能容纳的重量。接下来的s行每行有两个正整数v,w。

输出

输出每组测试数据中背包内的物品的价值和,每次输出占一行。

样例输入

1
3 15
5 10
2 8
3 9

样例输出

65

//思想 按照价格从大到小排列 先装价格高的;怎么去装 就是“一个一个”地去看能否装进包里(包的容量逐渐减小)
#include<stdio.h>
#include<algorithm>
using namespace std;

struct Node {
	int v,w;
} str[1005];

bool cmp(Node x,Node y) {//价格从大到小排序 
	if(x.v==y.v) {
		return x.w<y.w;
	} else {
		return x.v>y.v;
	}
}
int main() {
	int n;
	scanf("%d",&n);
	while(n--) {
		int s,m,sum=0;
		scanf("%d %d",&s,&m);
		for(int i=0; i<s; i++) {
			scanf("%d %d",&str[i].v,&str[i].w);
		}
		sort(str,str+s,cmp);
//			for(int i=0;i<s;i++){
//			printf("%d %d\n",str[i].v,str[i].w);
//		}
		for(int i=0; i<s; i++) {
			if(str[i].w<=m) {//能装进去  
				sum+=str[i].w*str[i].v;
				m-=str[i].w;// 别忘了!!! 
			} else {//剩余容量 
				sum+=m*str[i].v;
				break;//别忘了!!! 
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像分割是将图像分成多个部分或区域的过程,每个区域具有一些特定的属性或特征。图像分割在计算机视觉和图像处理中被广泛应用,例如目标检测、图像识别、医学图像处理等。 Python是一种流行的编程语言,它有许多强大的图像处理和计算机视觉库。在Python中实现图像分割的方法有很多,下面介绍两种常用的方法。 1. 基于阈值的图像分割 基于阈值的图像分割是一种简单的图像分割方法。该方法将图像像素值与一个阈值进行比较,将大于等于阈值的像素分为一个区域,将小于阈值的像素分为另一个区域。 下面是一个基于阈值的图像分割的Python代码示例: ```python import cv2 # 读取图像 img = cv2.imread('image.jpg') # 灰度化 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化 ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 显示图像 cv2.imshow('binary', binary) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码首先通过OpenCV库读取一张图像,然后将其转换为灰度图像。接着使用cv2.threshold()函数将灰度图像二值化,得到二值图像。最后使用cv2.imshow()函数显示二值图像,并等待用户按下任意键后关闭窗口。 2. 基于聚类的图像分割 基于聚类的图像分割是一种更复杂的图像分割方法。该方法将像素看作数据点,使用聚类算法将像素分为不同的簇,每个簇代表一个区域。 下面是一个基于聚类的图像分割的Python代码示例: ```python import cv2 import numpy as np from sklearn.cluster import KMeans # 读取图像 img = cv2.imread('image.jpg') # 将像素值转换为浮点数 img_float = np.float32(img.reshape(-1, 3)) # 使用KMeans算法对像素进行聚类 kmeans = KMeans(n_clusters=2) kmeans.fit(img_float) labels = kmeans.predict(img_float) # 将聚类结果转换为图像 segmented_img = labels.reshape(img.shape[0], img.shape[1]) # 显示图像 cv2.imshow('segmented', segmented_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码首先通过OpenCV库读取一张图像,然后将其像素值转换为浮点数。接着使用scikit-learn库中的KMeans算法对像素进行聚类,得到每个像素所属的簇。最后将聚类结果转换为图像,并使用cv2.imshow()函数显示分割后的图像。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值