HDU 3555 Bomb(数位dp)

本文详细解析了HDU3555 Bomb问题的数位DP解决方案,介绍了状态划分及转移过程。该问题涉及三种状态:0表示前一位不是4且前几位没有49;1表示前一位是4且前几位没有49;2表示前几位有49。通过递归函数实现状态转移,最终求得符合特定条件的数字数量。

题目链接:HDU 3555 Bomb

数位dp。

这个题有三种状态,0表示前一位不是4并且前几位没有49,1表示前一位是4并且前几位没有49,2表示前几位有49。

剩下的全写在注释上了。

#include <iostream>
#include <cstring>

using namespace std;

const int MAX_N = 20 + 5;
long long dp[MAX_N][3];
long long num[MAX_N];
long long n;
int T;

long long f(int pos, int st, bool limit)
{
    if(pos == -1)
        return st == 2;
    if(!limit && dp[pos][st] != -1)
        return dp[pos][st];
    long long ans = 0;
    int last = limit ? num[pos] : 9;
    for(int i = 0; i <= last; i++)
    {
        int temp = st;//开始没这么写,返回值一直是0。。。
        if(st == 1 && i == 9)//前一位是4,这一位是9
            temp = 2;
        else if(st == 1 && i != 4)//前一位是4,这一位不是4
            temp = 0;
        else if(i == 4 && st != 2)//这一位是4并且前边不包括49,即st != 2
            temp = 1;
        ans += f(pos - 1, temp, limit && i == last);
    }
    if(!limit)
        dp[pos][st] = ans;
    return ans;
}
long long cal(long long n)
{
    int pos = 0;
    while(n > 0)
    {
        num[pos] = n % 10;
        n /= 10;
        pos++;
    }
    return f(pos - 1, 0, 1);
}
int main()
{
    cin >> T;
    memset(dp, -1, sizeof(dp));
    while(T--)
    {
        cin >> n;
        cout << cal(n) << endl;
    }
    return 0;
}


多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)内容概要:本文介绍了基于Matlab代码实现的多源动态最优潮流的分布鲁棒优化方法,适用于IEEE118节点电力系统。该方法结合两阶段鲁棒模型与确定性模型,旨在应对电力系统中多源输入(如可再生能源)的不确定性,提升系统运行的安全性与经济性。文中详细阐述了分布鲁棒优化的建模思路,包括不确定性集合的构建、目标函数的设计以及约束条件的处理,并通过Matlab编程实现算法求解,提供了完整的仿真流程与结果分析。此外,文档还列举了大量相关电力系统优化研究案例,涵盖微电网调度、电动汽车集群并网、需求响应、储能配置等多个方向,展示了其在实际工程中的广泛应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源系统优化工作的工程师。; 使用场景及目标:①用于研究高比例可再生能源接入背景下电力系统的动态最优潮流问题;②支撑科研工作中对分布鲁棒优化模型的复现与改进;③为电力系统调度、规划及运行决策提供理论支持与仿真工具。; 阅读建议:建议读者结合提供的Matlab代码与IEEE118节点系统参数进行实操演练,深入理解分布鲁棒优化的建模逻辑与求解过程,同时可参考文中提及的其他优化案例拓展研究思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值