0
点赞
收藏
分享

微信扫一扫

九小时九个人九扇门

Sikj_6590 2022-01-25 阅读 43
#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
const int mod = 998244353;
typedef long long ll;

int n;
int a[N];
int f[N][10];
void solve() {
	cin >> n;
    for (int i = 1; i <= n ;i++) {
        cin >> a[i];
        a[i] %= 9;
    }
   
    for (int i = 1; i<= n; i++) {
        (f[i][a[i]] += 1) %mod;
        for (int j = 0; j < 9; j++) {
            (f[i][j] += f[i - 1][j]) %=mod;
            (f[i][(j +a[i]) % 9] += f[i -1][j]) %=mod;
        }
    }
    for (int i =1; i<= 8; i ++) cout << f[n][i] << " ";
    cout << f[n][0] << endl;
}
int main () {
	
	int t;
	t = 1;
	while (t --) solve();
	return 0;
}

https://ac.nowcoder.com/acm/contest/23106/A 关键在于每个数的根为对9取模。 然后就可以转换为01背包问题 为什么没想出来,没往dp的方向想,甚至没有认出是01背包。01背包就是每个物品取或者不取。

举报

相关推荐

0 条评论