贪心算法-背包问题

cs 复制代码
#include<stdio.h>
#define N 5 //物品数量(总类) 
#define W 100 //容量 
int v_temp[N+1], w_temp[N+1]; // 物品价值数组,物品容量数组
double vw_temp[N+1];//单位物品价值容量数组
double answer[N+1] = {0};//解方案数组 
void show(int v[],int w[],double vw[])
{
	int i;
	for(i = 1;i<=N;i++){
		printf("%d  ",v[i]);
	}
	printf("\n");
	for(i = 1;i<=N;i++){
	    printf("%d  ",w[i]);
	}
	printf("\n");
		for(i = 1;i<=N;i++){
		printf("%.1f ",vw[i]);
	}
	printf("\n");
}
void merge_sort(int v[],int w[],double vw[],int l,int r)
{
	if(l>=r)
	{
		return ;
	}
	int mid = (l+r)/2;
	merge_sort(v,w,vw,l,mid);
	merge_sort(v,w,vw,mid+1,r);
	int i = l,j = mid+1,k = 1;
	while(i<=mid && j<=r)
	{
		if(vw[i] > vw[j])
		{
			vw_temp[k] = vw[i];
			v_temp[k] = v[i];
			w_temp[k] = w[i];
			k++,i++;
		}
		else
		{
			vw_temp[k] = vw[j];
			v_temp[k] = v[j];
			w_temp[k] = w[j];
			k++,j++;
		}
	}
	while(i<=mid)
	{
		vw_temp[k] = vw[i];
		v_temp[k] = v[i];
		w_temp[k] = w[i];
		k++,i++;
	}
	while(j<=r)
	{
		vw_temp[k] = vw[j];
		v_temp[k] = v[j];
		w_temp[k] = w[j];
		k++,j++;
	}
	for(i = l,j= 1;i<=r;i++,j++)
	{
		vw[i] = vw_temp[j];
		v[i] = v_temp[j];
		w[i] = w_temp[j];
	}
}
double max_value(int v[],int w[],double vw[])
{
	double result = 0.0;
	int i,w_temp = W;
	for(i = 1;i<=N;i++)
	{
		if(w_temp>w[i])
		{
			answer[i] = 1;
			result = result+v[i];
			w_temp = w_temp-w[i];
		}
		else
		{
			break;
		}
	}
	if(w_temp>0 && i<=N)
	{
		answer[i] = (double)w_temp/w[i];
		result = result + w_temp*vw[i];
	}
	return result;
}
int main()
{
	int v[] = {0,20,65,30,40,60};//物品价值数组 
	int w[] = {0,10,30,20,40,50};//物品容量数组
	double vw[N+1] = {0};
	int i;
	for(i = 1;i<=N;i++)
	{
		vw[i] = (double)v[i]/w[i];
	} 
	printf("排序前\n");
	show(v,w,vw);
	
	printf("排序后\n");
	merge_sort(v,w,vw,1,N);//归并排序 
	show(v,w,vw);
	
	double result = max_value(v,w,vw); 
	printf("result = %.1f\n",result);
	
	printf("解方案结果为:\n");
	for(i = 1;i<=N;i++)
	{
		printf("%.1f ",answer[i]);
	}
	return 0;
}
相关推荐
地平线开发者4 分钟前
地平线征程6M YOLOv8s 部署
算法·自动驾驶
Run_Teenage6 分钟前
算法:Manacher(马拉车)算法、中心扩展算法
算法
波力海苔夹心脆67529 分钟前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
Tisfy1 小时前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举
Nil2081 小时前
leetcode 322零钱兑换
算法·leetcode·职场和发展
海绵宝宝转agent1 小时前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi0111 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
木井巳1 小时前
【BFS 解决拓扑排序】课程表
java·算法·leetcode·广度优先·宽度优先·推荐算法·图搜索算法
扶风ff1 小时前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
yi0112 小时前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针