acgo题库
  • 首页
  • 题库
  • 学习
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情提交记录(0)
  • 爆肝!!!

    userId_undefined

    复仇者_帅童

    小有名气CSP-J一等奖出题人
    51阅读
    0回复
    1点赞
  • 记忆化递归改

    这道题目,所有的问题都局限在(0,0,0)到(20,20,20)之间,所以直接先递归填充表格,然后根据输入调用表格的值就行。 #include <bits/stdc++.h> using namespace std; long long num[50][50][50]; int w(long long a,long long b,long long c){ if(a <= 0 || b <= 0 || c<=0) return 1; if(num[a][b][c]) return num[a][b][c]; if(a > 20 || b >20 || c > 20) return w(20,20,20); if(a < b &&b < c) return w(a,b,c-1) +w(a,b-1,c-1)-w(a,b-1,c); return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1); } int main(){ for(int i = 0;i <=20;i++){ for(int j = 0;j <=20;j++){ for(int x = 0;x <=20;x++){ num[i][j][x] = w(i,j,x); } } } long long a,b,c; while(cin >>a >>b >>c){ if(a==-1 && b==-1 && c==-1){ return 0; } if(a <= 0 || b <= 0 || c<=0) printf("w(%lld, %lld, %lld) = 1\n",a,b,c); else if(a > 20 || b >20 || c > 20) printf("w(%lld, %lld, %lld) = %lld\n",a,b,c,num[20][20][20]); else printf("w(%lld, %lld, %lld) = %lld\n",a,b,c,num[a][b][c]); } return 0; }

    userId_undefined

    风虽

    秩序白银
    41阅读
    0回复
    1点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页