cf237,D.Minesweeper 1D (小范围后效性dp)

本文介绍了一种解决一维扫雷问题的动态规划方法,通过分析不同状态转移来计算可能的组合数,并提供了详细的代码实现。

题目:一维扫雷的情景,输入一行串,包含0,1,2,*,?

0,1, 2,表示周围的雷的个数,*表示雷,?表示未定。问共有多少中合理组合.

线性dp:

dp[n][i]表示的是长度为n的串的状态

i= 0时表示,其后面不加*的组合数;i= 1时,其后面加*的组合数;i= 2表示,当前的位置为*的组合数

注意初始化和最后的取解

Codefoeces 404D Minesweeper 1D "小范围后效性"dp写的不错

//#pragma warning (disable: 4786)
//#pragma comment (linker, "/STACK:16777216")
//HEAD
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <string>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
//LOOP
#define FE(i, a, b) for(int i = (a); i <= (b); ++i)
#define FD(i, b, a) for(int i = (b); i>= (a); --i)
#define REP(i, N) for(int i = 0; i < (N); ++i)
#define CLR(A,value) memset(A,value,sizeof(A))
#define CPY(a, b) memcpy(a, b, sizeof(a))
#define FC(it, c) for(__typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
//INPUT
#define RI(n) scanf("%d", &n)
#define RII(n, m) scanf("%d%d", &n, &m)
#define RIII(n, m, k) scanf("%d%d%d", &n, &m, &k)
#define RS(s) scanf("%s", s)
//OUTPUT
#define WI(n) printf("%d\n", n)
#define WS(s) printf("%s\n", s)

typedef long long LL;
const int INF = 1000000007;
const double eps = 1e-10;
const int maxn = 1100010;
const int MOD = 1000000007;

int n, k;
int dp[maxn][3];
int main ()
{
    char s[maxn];
    scanf("%s", s);
    n = strlen(s);
    if (s[0] == '1') dp[1][1] = 1;
    else if (s[0] == '0') dp[1][0] = 1;
    else if (s[0] == '*') dp[1][2] = 1;
    else if (s[0] == '?')
    {
        dp[1][1] = 1;
        dp[1][0] = 1;
        dp[1][2] = 1;
    }
    for (int i = 1; i < n; i++)
    {
        if (s[i] == '?' || s[i] == '0')
        {
            dp[i + 1][0] += dp[i][0];
            dp[i + 1][0] %= MOD;
        }
        if (s[i] == '?' || s[i] == '1')
        {
            dp[i + 1][0] += dp[i][2];
            dp[i + 1][0] %= MOD;
            dp[i + 1][1] += dp[i][0];
            dp[i + 1][1] %= MOD;
        }
        if (s[i] == '?' || s[i] == '2')
        {
            dp[i + 1][1] += dp[i][2];
            dp[i + 1][1] %= MOD;
        }
        if (s[i] == '?' || s[i] == '*')
        {
            dp[i + 1][2] += dp[i][1] + dp[i][2];
            dp[i + 1][2] %= MOD;
        }
    }
    cout << (dp[n][0] + dp[n][2]) % MOD << endl;
    return 0;
}

小范围后效性dp,参考上文写的。感觉记录后面的状态和不记录后面的状态的写法差不多,关键还是分析清楚

//#pragma warning (disable: 4786)
//#pragma comment (linker, "/STACK:16777216")
//HEAD
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <string>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
//LOOP
#define FE(i, a, b) for(int i = (a); i <= (b); ++i)
#define FD(i, b, a) for(int i = (b); i>= (a); --i)
#define REP(i, N) for(int i = 0; i < (N); ++i)
#define CLR(A,value) memset(A,value,sizeof(A))
#define CPY(a, b) memcpy(a, b, sizeof(a))
#define FC(it, c) for(__typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
//INPUT
#define RI(n) scanf("%d", &n)
#define RII(n, m) scanf("%d%d", &n, &m)
#define RIII(n, m, k) scanf("%d%d%d", &n, &m, &k)
#define RS(s) scanf("%s", s)
//OUTPUT
#define WI(n) printf("%d\n", n)
#define WS(s) printf("%s\n", s)

typedef long long LL;
const int INF = 1000000007;
const double eps = 1e-10;
const int MAXN = 1000010;
const int MOD = 1000000007;

int dp[1000100][5];
char s[1000100];
/***
0:0

1:当前为1,前一个为*
2:当前为1,后一个为*(前一个不为*)

3:2
4:*
*/
int main ()
{
    scanf("%s", s);
    int n = strlen(s);
    if (s[0] == '2')
    {
        printf("0\n");
        return 0;
    }
    if (s[0] == '0')
        dp[1][0] = 1;
    else if (s[0] == '1')
        dp[1][2] = 1;
    else if (s[0] == '*')
        dp[1][4] = 1;
    else if (s[0] = '?')
    {
        dp[1][0] = dp[1][2] = dp[1][4] = 1;
    }
    for (int i = 1; i < n; i++)
    {
        char c = s[i];
        if (c == '1')
        {
            dp[i + 1][2] += (dp[i][0] + dp[i][1]) % MOD;
            dp[i + 1][2] %= MOD;
            dp[i + 1][1] += dp[i][4];
            dp[i + 1][1] %= MOD;
        }
        else if (c == '0')
        {
            dp[i + 1][0] += (dp[i][0] + dp[i][1]) % MOD;
            dp[i + 1][0] %= MOD;
        }
        else if (c == '2')
        {
            dp[i + 1][3] += dp[i][4];
            dp[i + 1][3] %= MOD;
        }
        else if (c == '*')
        {
            dp[i + 1][4] += ((dp[i][3] + dp[i][2]) % MOD + dp[i][4]) % MOD;
            dp[i + 1][4] %= MOD;
        }
        else
        {
            dp[i + 1][2] += (dp[i][0] + dp[i][1]) % MOD;
            dp[i + 1][2] %= MOD;
            dp[i + 1][1] += dp[i][4];
            dp[i + 1][1] %= MOD;
            dp[i + 1][0] += (dp[i][0] + dp[i][1]) % MOD;
            dp[i + 1][0] %= MOD;
            dp[i + 1][3] += dp[i][4];
            dp[i + 1][3] %= MOD;
            dp[i + 1][4] += ((dp[i][3] + dp[i][2]) % MOD + dp[i][4]) % MOD;
            dp[i + 1][4] %= MOD;
        }
    }
    int ans = dp[n][0];
    ans += (dp[n][1] + dp[n][4]) % MOD;
    ans %= MOD;
    cout << ans << endl;

    return 0;
}




我们把同一标的(昆仑万维,现价 43.20 元,2026-07-31 收盘)交给三套系统,各出一份独立分析: **C 报告(CoordClaw 基于管理学多智能体系统)**——投研级。它由五个角色构成:周婷整合撰写、李静出基本面、王芳出技术面、赵明出风险、陈默做 PM 终审。最终产物是一份 38 项分级风险清单(P0×4 / P1×12 / P2×12 / P3×6 / 尾部×4)、双源交叉验证的财务数据(EM/Sina 差异 <0.01%)、严格的口径纪律,以及一份原样保留的"待核实"清单。结论冷冰冰:高风险,不建议参与。 **D 报告(DeepSeek)**——信息整理级。它把"4+3 AGI 战略"、天工 AI、Opera 浏览器、StarMaker 拆得很漂亮,核心财务数据(营收 81.98 亿、归母 -15.93 亿)也没算错。但整篇没有技术面、没有量化风控,更关键的是——它完全没提实控人已减持 75%、质押状态未知、净现金仅 15.19 亿且续航只有 1.26~1.81 年这些要命的负面。这是典型的"选择呈现"。 **K 报告(Kimi)**——以对比评估的方式呈现。它搭起"数据准确 / 分析维度 / 结论合理"的三维框架,把几份材料放在一起对照,给出各自的强弱判定。它的维度意识比 D 报告更自觉,但作为一份独立分析,它对"评估方法本身的信度"交待不足,部分引用的核对也不够彻底。 结果两家的结论高度一致。C 报告(多智能体)被评投研级、居首;D 报告(DeepSeek 自己写的)被评信息整理级、居中;K 报告(Kimi 自己那份)维度较全但核验深度有限,排在两者之间。DeepSeek 的那份评估把 C 给了五星、D 三星、K 四星;Kimi 的那份评估也独立地把最高分给了 C。
问题现象 - 同一张 TF 卡/SD 卡在其他电脑上能正常识别,插到本机却只"响一声",资源管理器里不显示盘符; - 磁盘管理里能看到磁盘,但显示为灰色 / RAW / 无盘符; - 插入 U 盘、读卡器后偶尔能显示,重启或更换卡片后又消失; - 使用 diskpart、mountvol 等命令时系统卡住无响应。 ## 问题根源 经排查,这类问题通常不是 TF 卡损坏,而是 Windows 存储子系统与本机读卡器/驱动之间的兼容故障,主要包括: 1. **盘符未分配** —— 卷已被系统识别,但没有挂载点,因此资源管理器不显示; 2. **USB 幽灵设备残留** —— 系统里残留 `Disconnected` 状态的 USBSTOR 设备记录,阻塞新设备枚举; 3. **USB 选择暂停(Selective Suspend)** —— Windows 空闲时给读卡器断电,导致识别不稳定; 4. **automount 被关闭或失效** —— 新插入的卷无法自动分配盘符; 5. **存储堆栈挂起** —— 残留的 diskpart 进程锁死存储服务。 ## 解决方案(一键永久修复) 本项目是一个 **Codex Skill + 一键安装器**,自动完成以下修复: - 启用系统自动挂载(automount enable / scrub) - 清理 Disconnected 幽灵 USB 设备 - 永久禁用 USB 选择暂停(防读卡器被断电) - 自动为所有无盘符的可移动卷分配盘符 - 注册**开机守护任务**:每次开机自动执行以上修复,彻底告别手动操作 ## 使用方法 ```powershell # 在其他电脑上(Windows 10/11): # 1. 下载本项目 # 2. 右键 install.bat → 以管理员身份运行(或直接双击后点"是")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值