1. 程式人生 > >[JZOJ 5195] 【NOIP2017提高組模擬7.3】A//2018.10.29 {動態規劃}

[JZOJ 5195] 【NOIP2017提高組模擬7.3】A//2018.10.29 {動態規劃}

題目

在這裡插入圖片描述 在這裡插入圖片描述

解題思路動態規劃

我們可以將方案分成兩種:

  1. 至少包含一個 11 的;
  2. 一個 11 都不包含。

f[i][j]f[i][j]表示答案,那麼表示11的答案即為f[i1][j1]f[i-1][j-1],表示22的答案即為f[i][j1]f[i][j-1](相當於把每個數都加上11),所以有:,時間O(nk)O(nk)

程式碼

#include<cstdio>
#include<algorithm>
#include<iostream>
#define rr register 
using namespace std; const long long mod=998244353; long long n,m,f[6005][6005]; signed main() { scanf("%lld%lld",&n,&m); f[0][0]=1; //初始化 for (rr long long i=1;i<=m;i++) for (rr long long j=i;j<=n;j++) f[i][j]=(f[i-1][j-1]+f[i][j-i])%mod; printf("%lld",f[m][n]); }