【Luogu】P1417烹调方案(排序01背包)
2024-08-30 10:41:44
对食材进行排序,重载运算符代码如下:
struct food{
long long a,b,c;
bool operator <(const food &a)const{
return c*a.b<a.c*b;
}
}s[];
理由是,如果你先做当前的食材,让下一个食材等着,那下一个食材的损失就是c*a.b
如果你先做下一个食材,让当前食材等着,当前食材损失就是a.c*b
那当然以损失小为原则排序
随后就是普通的01背包。代码如下:
#include<cstdio>
#include<algorithm>
#include<cctype>
#include<ctime>
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct food{
long long a,b,c;
bool operator <(const food &a)const{
return c*a.b<a.c*b;
}
}s[]; long long f[];
long long ans;
int main(){
long long m=read(),n=read();
for(long long i=;i<=n;++i) s[i].a=read();
for(long long i=;i<=n;++i) s[i].b=read();
for(long long i=;i<=n;++i) s[i].c=read();
std::sort(s+,s+n+);
for(long long i=;i<=;++i)
for(long long j=m;j>=s[i].c;--j)
f[j]=std::max(f[j],f[j-s[i].c]+s[i].a-j*s[i].b);
for(long long i=;i<=m;++i) ans=std::max(ans,f[i]);
printf("%lld",ans);
return ;
}
最新文章
- lamper技能树
- getbyclass
- ACM2013.9.7
- IPhone手机自动添加到itunes设置
- 猎豹使用AI RoboForm填表
- IntelliJ IDEA14 安装
- linux下javaEE系统安装部署
- 使用Python做科学计算初探
- uncompyle2 windows安装和使用方法
- Swift - 使用相机拍摄照片
- jquery data属性的使用
- 输入和输出--RandomAccessFile类
- mysql 导出每张表中的100条数据..............
- 洛谷p1067
- 探秘小程序(10):分享功能+webview
- .NET JSON 转换 Error ” Self referencing loop detected for type“
- 057 Hive项目案例过程
- wapp HTTP Error 404. The requested resource is not found.
- c#按照指定长度切分字符串
- 修改SQL Server 的排序规则(转)