日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hihoCoder 1367 等式填空

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hihoCoder 1367 等式填空 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

明確題意

等號左邊是由'+'和'?'組成的算式,其中處于某個整數(即便這個整數只有一位)首位的'?'可以填入1-9中的某個數字,其余'?'可以填入0-9中的某個數字。
SOURCE

這里未明確等號左邊有幾個整數(至少有一個)。讀題時我未能仔細理解這句話的含義,根據樣例誤認為有且僅有兩個整數相加。另外,等號右邊的非負整數,題目雖未明確是否有前導零,可以認為沒有(不應該在這里糾結題意)。

做題的第一步是讀題,誠哉斯言!

解法

數位DP。

將等號右邊的非負整數的數位,按從低位到高位的順序從1開始編號。

$dp[i][j]$:滿足前 $i$ 位且對第 $i+1$ 位的進位是 $j$ 的方案數

$n$ 個正整數相加, 每一位向前一位的進位都小于 $n$

狀態轉移便轉化成了組合計數問題。

將 $n$ 個相同的球放進 $m$ 個不同的盒子里,每個盒子里最多放 $9$ 個球。在這 $n$ 個盒子中指定 $k$ 個,其中每個盒子里至少放一個球。求方案數。

由于放進的球數有上限,并不能用擋板法。

做法:枚舉分配到 $k$ 個非空盒子的球的總數,分別計算兩類盒子的放置方案數,這兩個計數問題都可采用簡單的DP解決。

總復雜度:$O(n^2+mn^3)$,$n$ 是等號左邊的數(加數)的個數,$m$ 是等號右邊數(和)的位數。

練習題

hihoCoder 1076 與鏈

Implementation

#include <bits/stdc++.h> using namespace std;const int N=105;long long dp[N][50]; const int mod=1e9+7;char s[N]; int c[2][50][500];void prep(int n) {c[1][0][0]=c[0][0][0]=1;for(int i=1; i<=n; i++){for(int j=i; j<=9*i; j++){for(int k=1; k<=min(9, j-i+1); k++){c[1][i][j]+=c[1][i-1][j-k], c[1][i][j]%=mod;}}for(int j=0; j<=9*i; j++){for(int k=0; k<=min(9, j); k++){c[0][i][j]+=c[0][i-1][j-k], c[0][i][j]%=mod;}}} }vector<int> a;int main() {int ma=0;for(; ; ){int len;scanf("%*[?]%n%[=+]", &len, s);a.push_back(len);ma=max(ma, len);if(s[0]=='='){break;}}int n;scanf("%s%n", s+1, &n);if(n<ma){puts("0");return 0;}prep(a.size());reverse(s+1, s+n+1);dp[0][0]=1;int carry=a.size();for(int i=1; i<=n; i++){int cnt1=0, cnt2=0;for(auto x: a){cnt1+=x==i;cnt2+=x>i;}for(int j=0; j<carry; j++)for(int k=0; k<carry; k++){int tot=s[i]-'0'+10*j-k;long long sum=0;for(int l=cnt1; l<=tot; l++){sum+=(long long)c[1][cnt1][l]*c[0][cnt2][tot-l];sum%=mod;}dp[i][j]+=dp[i-1][k]*sum;dp[i][j]%=mod;}}cout<<dp[n][0]<<endl;return 0; }

轉載于:https://www.cnblogs.com/Patt/p/6403556.html

總結

以上是生活随笔為你收集整理的hihoCoder 1367 等式填空的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。