求助,我这种状态设计为什么TLE
查看原帖
求助,我这种状态设计为什么TLE
305002
vegetable_ste楼主2021/8/18 21:14

(我以前可能学了个假的记忆化搜索。。。)

fpos,k,cntf_{pos, k, cnt} 表示到第 pospos 个点,摆 cntcntkk 类花

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
const int MOD = 1e6 + 7;
int n, m, a[N], dp[N][N][N];
int solve(int pos, int k, int cnt) {
	#define result dp[pos][k][cnt]
	if(!cnt) {
		int res = 0;
		for(int i = 1; i < k; i ++ )
			for(int j = 1; j <= a[i]; j ++ )
				res = (res + solve(pos, i, j)) % MOD;
		return result = res % MOD;
	}
	if(pos == 1) return result = (cnt > 1 ? 0 : cnt);
	if(!pos) return result = 0;
	if(result) return result;
	return result = solve(pos - 1, k, cnt - 1) % MOD;
}
int main() {
	cin >> n >> m;
	for(int i = 1; i <= n; i ++ ) cin >> a[i];
	int ans = 0;
	for(int i = 1; i <= n; i ++ )
		for(int j = 1; j <= a[i]; j ++ )
			ans = (ans + solve(m, i, j)) % MOD;
	cout << ans << endl;
	return 0;
}
2021/8/18 21:14
加载中...