_weishiqi66_ @ 2022-11-29 14:01:52
求助 %深搜+记忆化 0分 样例全过,奇怪的是下载样例后,输出与样例一样
#include<bits/stdc++.h>
#define ll long long
#define N 2*int(1e5)
using namespace std;
int a,b,c,ans;
int f[25][25][25];
int w(int a,int b,int c){
if(a<=0||b<=0||c<=0) return 1;
else if(f[a][b][c]!=0) return f[a][b][c];
else if(a>20||b>20||c>20) f[a][b][c]=w(20,20,20);
else if(a<b&&b<c) f[a][b][c]= w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
else f[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 f[a][b][c];
}
int main(){
while(1){
cin>>a>>b>>c;
ans=0;
if(a==-1&&b==-1&&c==-1) break;
if(a>20) a=21;
if(b>20) b=21;
if(c>20) c=21;
printf("w(%d, %d, %d) = ",a,b,c);
printf("%d\n",w(a,b,c));
}
return 0;
}
by SkyWave @ 2022-11-29 14:19:00
多组数据不是这样玩的,这样会无休止的输入
by Land_ER @ 2022-11-29 14:27:07
@weishiqi66 把 while(1)
和后面的输入改成 while(scanf("%d%d%d", &a, &b, &c))
by Register_int @ 2022-11-29 15:06:18
@SkyWave @Land_ER
if(a==-1&&b==-1&&c==-1) break;
眼瞎赶快找人治一治。
by Register_int @ 2022-11-29 15:07:58
@Land_ER 有区别吗???
by Register_int @ 2022-11-29 15:09:23
@weishiqi66 你在输出 w(a,b,c)=
之前先修改了
by Register_int @ 2022-11-29 15:10:33
@weishiqi66
if(a>20) a=21;
if(b>20) b=21;
if(c>20) c=21;
printf("w(%d, %d, %d) = ",a,b,c);
改成
printf("w(%d, %d, %d) = ",a,b,c);
if(a>20) a=21;
if(b>20) b=21;
if(c>20) c=21;
by 听取MLE声一片 @ 2022-11-29 15:18:26
我赞同 Re 的说法
by Anahita @ 2022-11-29 15:24:16
我赞同MLE的说法(
by SkyWave @ 2022-11-29 16:32:08
@Register_int 我错了
by SkyWave @ 2022-11-29 16:34:12
cjld好凶呜呜呜