IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> AtCoder Beginner Contest 244 E 线性dp 动态规划 图论 -> 正文阅读

[数据结构与算法]AtCoder Beginner Contest 244 E 线性dp 动态规划 图论

题目

给你N个点M条无向边。
要求
求出从点S出发,点T为终点的路径中路径长度为K且经过点X偶数次(包括0次)的路径数有多少条。
N <= 2000
M <= 2000
答案对998244353取模

题解思路

想了半天什么dfs什么组合数学都出来了。
直接dp
f[i][j][k] 走了i步停在j点经过X点的奇偶性为k(0或者1)的路径数。
初始化
f[0][s][0] = 1 ;
转移
对于k步枚举所有边,如果是X点就改变k的奇偶性,不是就直接加。

AC代码

#include <bits/stdc++.h>
//#include <unordered_map>
//priority_queue
#define PII pair<int,int>
#define ll long long

using namespace std;

const  int  INF =  0x3f3f3f3f ;
const  int  N =  200100 ;
const int mod = 998244353 ; 
vector <PII> sk ; 
long long f[2010][2010][3] ; 
void solve()
{
    int n , m , k , s , t , x ;
    cin >> n >> m >> k >> s >> t >> x ; 
    for (int i = 1 ; i <= m ; i++ )
    {
        int t1 , t2 ;
        cin >> t1 >> t2 ;
        sk.push_back({t1,t2}) ; 
    }
    f[0][s][0] = 1 ; 
    for (int i = 1 ; i <= k ; i++ )
    {
        for ( auto j : sk )
        {
            for (int u = 0 ; u <= 1 ; u++ )
            {
                if ( j.first == x )
                {
                    f[i][j.first][u] = (f[i][j.first][u] + f[i-1][j.second][(u+1)%2] )%mod ; 
                    f[i][j.second][u] = (f[i][j.second][u] + f[i-1][j.first][u] )%mod ;
                }else if ( j.second == x )
                {
                    f[i][j.second][u] = (f[i][j.second][u] + f[i-1][j.first][(u+1)%2] )%mod ;
                    f[i][j.first][u] = (f[i][j.first][u] + f[i-1][j.second][u] )%mod ; 
                }
                else 
                {
                    f[i][j.first][u] = (f[i][j.first][u] + f[i-1][j.second][u] )%mod ; 
                    f[i][j.second][u] = (f[i][j.second][u] + f[i-1][j.first][u] )%mod ;
                }
            }
        }
    }
    cout << f[k][t][0] << "\n" ; 
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
        solve() ;
    return 0 ;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:48:42  更:2022-03-24 00:50:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:27:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码