【状压DP】【bzoj 1226】: [SDOI2009]学校食堂Dining

本文深入探讨了一道复杂的状压动态规划问题,并提供了一份详细的代码解析。通过对问题的逐步分解,介绍了如何利用状压技巧解决特定场景下的优化问题。

http://www.lydsy.com/JudgeOnline/problem.php?id=1226


及其恶心的状压,又抄标程去了。。。


//#define _TEST _TEST
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
/************************************************
Code By willinglive    Blog:http://willinglive.cf
************************************************/
#define rep(i,l,r) for(int i=(l),___t=(r);i<=___t;i++)
#define per(i,r,l) for(int i=(r),___t=(l);i>=___t;i--)
#define MS(arr,x) memset(arr,x,sizeof(arr))
#define LL long long
#define INE(i,u,e) for(int i=head[u];~i;i=e[i].next)
inline const int read()
{int r=0,k=1;char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-')k=-1;
for(;c>='0'&&c<='9';c=getchar())r=r*10+c-'0';return k*r;}
/////////////////////////////////////////////////
const int inf=0x3f3f3f3f;
int n;
int T[1010],B[1010];
int _dp[1010][1<<8][18];
#define dp(i,j,k) _dp[i][j][(k)+9]
/////////////////////////////////////////////////
void MIN(int &a,const int &b){if(a>b)a=b;}
/////////////////////////////////////////////////
void input()
{
    n=read();
    rep(i,1,n) T[i]=read(), B[i]=read();
}
void solve()
{
	MS(_dp,0x3f);
	int all=(1<<8)-1;
	dp(1,0,-1)=0;
	rep(i,1,n) rep(S,0,all) rep(j,-8,7) if(dp(i,S,j)<inf)
	{
		if(S&1) //当前的人已经选走了 
		{
			dp(i+1,S>>1,j-1)=dp(i,S,j);
		}
		else
		{
			int limit=inf;
			rep(k,0,7)
			{
				if(S&(1<<k)) continue;
				if(i+k>limit) break;
				MIN(limit,i+k+B[i+k]);
				MIN(dp(i,S|(1<<k),k),dp(i,S,j)+(i+j==0?0:(T[i+j]^T[i+k])));//把i+k放在i的前面
			}
		}
	}
	int ans=inf;
	rep(i,-8,-1) MIN(ans,dp(n+1,0,i));
	cout<<ans<<endl;
}
/////////////////////////////////////////////////
int main()
{
    #ifndef _TEST
    freopen("std.in","r",stdin); freopen("std.out","w",stdout);
    #endif
    rep(i,1,read())
    input(),solve();
    return 0;
}


内容概要:本文提出了一种针对大规模电动汽车接入电网的双层优化调度策略,并基于IEEE33节点系统进行了建模与仿真分析,配套提供了完整的Matlab代码实现。该策略构建了上层电网运行优化与下层电动汽车充电调度的双层协同模型,综合考虑电网负荷削峰填谷、电稳定性维持以及电动汽车用户充电需求满足等多重目标,采用先进的优化算法实现对电动汽车集群的智能有序调度。研究详细阐述了双层模型的构建逻辑、目标函数设计、约束条件设定及迭代求解流程,有效降低了电网峰谷差,提升了配电系统对可再生能源的消纳能力,兼具扎实的理论深度与明确的工程应用前景。; 适合人群:电气工程、电力系统及其自动化、能源系统优化等相关专业的研究生、科研人员以及从事智能电网、电动汽车调度、分布式能源管理等领域工作的工程师和技术人员。; 使用场景及目标:①深入研究高比例电动汽车接入对配电网运行特性的影响机制;②掌握电力系统双层优化建模方法及其在实际系统中的求解技巧;③实现电动汽车集群的协同调度与车网互动(V2G)优化控制;④作为撰写学术论文、开展课题研究或复现高水平期刊成果的技术参考与代码基础。; 阅读建议:建议读者结合所提供的Matlab代码逐行理解双层优化模型的数学表达与程序实现细节,重点剖析上下层模型之间的信息交互机制与收敛判据,可通过调整电动汽车渗透率、充电行为参数或引入分布式电源等场景进行拓展性仿真,以深化对智能调度策略适应性的认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值