第34次CCF-CSP认证第4题,货物调度

题目链接TUOJ

这道题是背包DP+贪心。这很明显是分组背包,一个仓库是一组,因为代价是和仓库和数量有关,与具体的货物无关(这也是贪心的基础)。

1.我们遍历每一组,对每一组的物品价值从大到小排序。这是很明显的,再这一组中选一定数量的物品代价就是一定的,我们肯定会选价值较高的才能得到最优解。

2.40000是通过数据范围算出来的最大代价,接下来就是跑分组背包的代码。

cpp 复制代码
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
int n,m,v,b[1005],c[1005],dp[40005];
vector<int>arr[1005];
int main()
{
cin>>n>>m>>v;
for(int i=0;i<n;i++){
	cin>>b[i]>>c[i];
}
int a,t;
for(int i=0;i<m;i++){
	cin>>a>>t;
	arr[t].push_back(a);
}
for(int i=0;i<=n;i++){
	sort(arr[i].begin(),arr[i].end(),greater<int>());
	for(int j=40000;j>=0;j--){
		int sum=0;
		for(int k=0;k<arr[i].size();k++){
			if(b[i]+c[i]*(k+1)<=j){
				sum+=arr[i][k];
				dp[j]=max(dp[j],dp[j-(b[i]+c[i]*(k+1))]+sum);
			}
			else break;
		}
	}
}
for(int i=1;i<=40000;i++){
	if(dp[i]-i>=v){
		cout<<i;
		return 0;
	}
}
	return 0;
}
相关推荐
bubiyoushang88814 小时前
雷达目标跟踪中扩展卡尔曼滤波(EKF)算法matlab实现
算法·matlab·目标跟踪
十五年专注C++开发15 小时前
通信中间件 Fast DDS(三) :fastddsgen的安装与使用
linux·c++·windows·中间件·跨平台
tpoog15 小时前
[C++项目组件]Etcd的简单介绍和使用
开发语言·c++·etcd
shark_dev15 小时前
C/C++ 数据类型选择笔记:int、long long、char、string、float、double
c语言·c++
wefg115 小时前
【算法】分治
数据结构·算法·排序算法
序属秋秋秋15 小时前
《C++进阶之C++11》【lambda表达式 + 包装器】
c++·笔记·学习·c++11·lambda表达式·包装器
想唱rap15 小时前
归并排序、计数排序以及各种排序稳定性总结
c语言·数据结构·笔记·算法·新浪微博
芒果量化15 小时前
ML4T - 第7章第4节 线性回归统计 Linear Regression for Statistics
算法·机器学习·线性回归
零一iTEM15 小时前
NS4168输出音频通过ESP32C3测试
c++·单片机·嵌入式硬件·mcu·音视频·智能家居
charlie11451419115 小时前
精读C++20设计模式——行为型设计模式:解释器模式
c++·学习·设计模式·解释器模式·c++20