求助 ,,模仿第一篇题解写的,只改动了一些地方,就不对了
  • 板块P1464 Function
  • 楼主MOXCOOT
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/2/16 13:59
  • 上次更新2023/11/5 03:12:41
查看原帖
求助 ,,模仿第一篇题解写的,只改动了一些地方,就不对了
419652
MOXCOOT楼主2021/2/16 13:59
#include<iostream>
#include<cstring>
#define NUM 25
using namespace std;
typedef long long ll;
ll res[NUM][NUM][NUM];
struct cno {
	ll a;
	ll b;
	ll c;
};
ll w(ll a, ll b, ll c) {
	if (a <= 0 || b <= 0 || c <= 0) return 1;
	else if (res[a][b][c] != 0)return res[a][b][c];
	else if (a < b && b < c) res[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
	else if (a > 20 || b > 20 || c > 20) {
		res[a][b][c] = w(20, 20, 20);
		return res[a][b][c];
	}
	else {
		res[a][b][c] = w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
		return res[a][b][c];
	}
		
}
int main() {
	int cnt = 0;
	memset(res, 0, sizeof(res));
	cno cn[NUM];
	while (1) {
		cin >> cn[cnt].a >> cn[cnt].b >> cn[cnt].c;
		if (cn[cnt].a > 20)cn[cnt].a = 21;
		if (cn[cnt].b > 20)cn[cnt].b = 21;
		if (cn[cnt].c > 20)cn[cnt].c = 21;
		if (cn[cnt].a == -1 && cn[cnt].b == -1 && cn[cnt].c == -1)break;
		cnt++;
	}
	for (int i = 0; i < cnt; i++) {
		cout << "w(" << cn[i].a << ", " << cn[i].b << ", " << cn[i].c << ") = " << w(cn[i].a, cn[i].b, cn[i].c)  << endl;
	}
}
2021/2/16 13:59
加载中...