21天好习惯第一期-2 DFS

本文解析了如何利用DFS序列和动态规划解决一个关于在树中给每个节点涂色的问题,强调了两种策略:重复颜色沿路径保持一致和使用剩余未用颜色。通过状态转移方程展示了如何计算使用不同颜色的节点组合。

思路:
感觉和dfs序联系不大,画个图后发现涂颜色只有两种方案(引用每日一题的图片):
在这里插入图片描述
1.使用用过的颜色,但是一定要和它处理过的父结点或者儿子结点涂一样的颜色,只有这样才能保证一样颜色的点在一个路径上;
2。使用没用过的颜色,已经用了j-1种颜色,所以还剩k-j+1种颜色可以涂
可以用dp来求解:
状态:dp[i][j],处理到第i个点时用了j种颜色。
状态转移方程:dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]*(k-j+1))%mod.

代码:

#include<bits/stdc++.h>
#define ll long long 
#define  js  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int mod=1e9+7;
ll dp[305][305],ans=0;
int n,k;
int main() {
    js;
    cin>>n>>k;
    dp[0][0]=1;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=k;++j)
            dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]*(k-j+1))%mod;
    for(int i=1;i<=k;++i)    ans=(ans+dp[n][i])%mod;
    cout<<ans<<endl;
    return 0;
}

这是dfs序的题解当然少不了,dfs序,引用的图片和介绍:
稍微注意一点,在一般的树中(二叉树除外)一个节点的儿子是没有左右顺序的可以随便先访问哪个,所以,一棵树的dfs序是可能有很多种的。
题号 NC13611
在这里插入图片描述

### RT-Thread DFS 文件系统概述 RT-Thread 中的虚拟文件系统(DFS)提供了一种统一的文件访问接口,这使得不同的具体文件系统能够在 RT-Thread 中以一致的方式被访问和操作[^1]。这种设计允许开发者无需关心底层具体的文件系统实现细节。 为了达到这一目标,虚拟文件系统对实际文件系统进行了抽象处理,提供了标准化的操作接口给用户程序调用,比如 `read`、`write` 和 `poll/select` 等函数[^2]。这些标准接口简化了应用程序开发过程中的文件读写逻辑编写工作量并提高了代码可移植性。 ### 配置与启用 DFS 组件 要使能 RT-Thread 的 DFS 功能模块,在项目配置阶段需借助 ENV 工具进入 menuconfig 菜单界面,并按照路径导航至如下选项: ``` RT-Thread Components ---> Device virtual file system ---> [*] Enable device filesystem support ``` 完成上述设置之后保存退出即可激活该特性支持[^3]。 ### 使用示例:挂载 FAT 文件系统到指定目录下 假设有一个 SD 卡设备已经连接到了嵌入式板子上,并且希望将其作为外部存储介质来使用,则可以通过下面这段 C 语言代码片段展示如何将 FAT 类型的具体文件系统注册进 DFS 并关联到特定路径节点处: ```c #include <dfs_posix.h> // 假设 sd0 是已初始化好的SD卡驱动实例名称 int mount_result = dfs_mount("sd0", "/sdcard", "elm", 0, 0); if (mount_result != 0) { printf("Failed to mount the FAT fs on /sdcard\n"); } else { printf("/sdcard mounted successfully.\n"); // 创建测试文件并向其中写入数据 int fd = open("/sdcard/test.txt", O_CREAT | O_RDWR, 0); if (fd >= 0) { const char *msg = "Hello from RT-Thread!"; write(fd, msg, strlen(msg)); close(fd); puts("File created and written."); } else { perror("open failed"); } } ``` 此段代码首先尝试把名为 `"sd0"` 的物理设备对象映射成 `/sdcard` 这个虚拟路径下的资源;如果成功的话就继续创建一个新的文本文件并将字符串消息存进去。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值