sicily 1346 金明的预算方案 有依赖的背包问题

本文介绍了一个具体的背包问题求解过程,特别关注于处理物品组及其附件的算法优化。通过使用结构化数据存储物品属性,并结合01背包问题的解决思路,实现了一种高效的算法解决方案。

他还从因特网上查到了每件物品的价格(都是10元的整数倍)

注意这句话就ok了。。之间没留意,结果TLE

#include <iostream> #include <cmath> #include <cstring> using namespace std; struct node { int v; //价格 int p; //重要度 int q; //所属主件的编号 }data[61]; int f[60][32001]; //物品组 int n, m; int ans[32001]; int main() { //freopen("1.txt", "r", stdin); while(cin >> n >> m) { memset(f, -1, sizeof(f)); f[0][0] = 0; n /= 10; for(int i = 1; i <= m; i++) { cin >> data[i].v >> data[i].p >> data[i].q; data[i].v /= 10; f[i][0] = 0; } //对附件集合进行一次01背包 for(int i = 1; i <= m; i++) { if(data[i].q == 0) continue; for(int j = n; j >= data[i].v; j--) { if(f[data[i].q][j - data[i].v] != -1) { f[data[i].q][j] = max(f[data[i].q][j], f[data[i].q][j - data[i].v] + data[i].v * data[i].p); } } } //对价值进行处理,更新为各物品组主件+附件 for(int i = 1; i <= m; i++) { if(data[i].q != 0) continue; for(int j = n; j >= 0; j--) { if(f[i][j] != -1) { if(j + data[i].v > n) f[i][j] = -1; else { f[i][j + data[i].v] = max(f[i][j + data[i].v], f[i][j] + data[i].v * data[i].p); f[i][j] = -1; } } } } //变成有物品组的背包问题 memset(ans, -1, sizeof(ans)); ans[0] = 0; int _max = 0; for(int i = 1; i <= m; i++) { if(data[i].q != 0) continue; for(int j = n; j >= data[i].v; j--) { for(int k = j; k >= data[i].v; k--) { if(f[i][k] != -1 && ans[j - k] != -1) { ans[j] = max(ans[j], f[i][k] + ans[j - k]); _max = max(_max, ans[j]); } } } } cout << _max * 10 << endl; } return 0; }

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值