洛谷 P1417 烹调方案

本文探讨了一种特殊的01背包问题,在此问题中选择顺序对最终结果产生影响。通过对比不同食材组合带来的美味指数损失,文章提出了一种排序策略以最小化这种损失,并给出了具体实现算法。

题目概述

    一共有n件食材,每件食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间。设计烹调方案使得美味指数最大。

    对于40%的数据1<=n<=10

    对于100%的数据1<=n<=50

    所有数字均小于100,000

解题思路

    这是一道01背包问题,但选择顺序对结果有影响。对于任意两件食材i和j,若i在j前面,则损失的美味指数为b[i]*c[i]+b[j]*(c[i]+c[j]);若j在i前,则损失的美味指数为b[j]*c[j]+b[i]*(c[i]+c[j])。由于美味指数只会随时间而减小,那么我们需要使损失的美味指数尽可能小:按b[i]*c[j]由小到大排序。

    f[i,j]表示前i件

    时间复杂度:O(nt)

    空间复杂度:O(nt)

源程序

var
 a,b,c:array[0..50]of longint;
 d,f:array[0..100000]of int64;
 i,j,n,m,t:longint;
 ans:int64;
function max(a,b:int64):int64;
 begin
  if a>b then exit(a)
         else exit(b);
 end;
begin
 readln(t,n);
 for i:=1 to n do
  read(a[i]);
 readln;
 for i:=1 to n do
  read(b[i]);
 readln;
 for i:=1 to n do
  read(c[i]);
 for i:=1 to n-1 do
  for j:=i+1 to n do
   if b[i]*c[j]>b[j]*c[i] then
    begin
     a[0]:=a[i];
     a[i]:=a[j];
     a[j]:=a[0];
     b[0]:=b[i];
     b[i]:=b[j];
     b[j]:=b[0];
     c[0]:=c[i];
     c[i]:=c[j];
     c[j]:=c[0];
    end;
 for i:=1 to n do
  begin
   d:=f;
   fillchar(f,sizeof(f),0);
   for j:=0 to t-c[i] do
    f[j]:=max(d[j],d[j+c[i]]+a[i]-(t-j)*b[i]);
   if t-c[i]>0 then
    for j:=t-c[i]+1 to t do
     f[j]:=d[j];
  end;
 ans:=0;
 for i:=0 to t do
  if ans<f[i] then ans:=f[i];
 write(ans);
end.

基于NSGA-III算法求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文围绕基于NSGA-III算法的微电网多目标优化调度展开研究,重点介绍了如何利用该先进多目标进化算法解决微电网系统中多个相互冲突的目标(如运行成本最小化、碳排放最低、供电可靠性最高等)的协同优化问题。文中结合Matlab代码实现,详细阐述了NSGA-III算法的基本原理、在微电网调度模型中的建模过程、约束条件处理、目标函数设计以及仿真结果分析,展示了其相较于传统优化方法在求解高维、非线性、多目标问题上的优越性。同时,文档还提供了丰富的相关研究案例和技术支持背景,涵盖电力系统优化、智能算法应用及Matlab仿真等多个方面。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源优化领域的工程技术人员;尤其适合正在进行微电网调度、多目标优化算法研究或撰写相关论文的研究者。; 使用场景及目标:①掌握NSGA-III算法的核心思想及其在复杂能源系统优化中的应用方式;②学习如何构建微电网多目标调度模型并利用Matlab进行仿真求解;③为科研项目、毕业论文或实际工程提供算法实现参考和技术支撑。; 阅读建议:建议读者结合文中提供的Matlab代码实例,逐步调试运行并深入理解算法流程与模型构建细节,同时可参考文档中列出的其他优化案例进行横向对比学习,以提升综合应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值