VJ 1080 Function(Function(F...

描述

对于一个递归函数w(a,b,c)

如果a<=0 or b<=0 or c<=0就返回值1.
如果a>20 or b>20 or c>20就返回w(20,20,20)
如果a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,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)

这是个简单的递归函数,但实现起来可能会有些问题。当a,b,c均为15时,调用的次数将非常的多。你要想个办法才行.

格式

输入格式

会有若干行.
并以-1,-1,-1结束.

输出格式

输出若干行

样例1

样例输入1[复制]

1 1 1
2 2 2
-1 -1 -1

样例输出1[复制]

w(1, 1, 1) = 2
w(2, 2, 2) = 4

来源

huyichen

记得开 unsigned long long !!! 血的教训!!

CODE:

#include <iostream>
#include <cstdio>
#include <cstring>
#define REP(i, s, n) for(int i = s; i <= n; i ++)
#define REP_(i, s, n) for(int i = n; i >= s; i --)
#define MAX_N 20 + 10

using namespace std;

int main(){
    int a, b, c;
    unsigned long long F[MAX_N][MAX_N][MAX_N];
    while(scanf("%d%d%d", &a, &b, &c) != EOF){
        if(a == -1 && b == -1 && c == -1) break;
        memset(F, 0, sizeof(F));

        REP(i, 0, 20) REP(j, 0, 20) REP(k, 0, 20)
            if(i == 0 || j == 0 || k == 0) F[i][j][k] = 1;

        REP(i, 1, 20) REP(j, 1, 20) REP(k, 1, 20){
            if(i < j && j < k) F[i][j][k] = F[i][j][k - 1] + F[i][j - 1][k - 1] - F[i][j - 1][k];
            else F[i][j][k] = F[i - 1][j][k] + F[i - 1][j - 1][k] + F[i - 1][j][k - 1] - F[i - 1][j - 1][k - 1];
        }

        if(a <= 0 || b <= 0 || c <= 0) printf("w(%d, %d, %d) = 1\n", a, b, c);
        else if(a > 20 || b > 20 || c > 20) printf("w(%d, %d, %d) = %llu\n", a, b, c, F[20][20][20]);
        else printf("w(%d, %d, %d) = %llu\n", a, b, c, F[a][b][c]);
    }
    return 0;
}
时间: 2024-10-20 20:57:11

VJ 1080 Function(Function(F...的相关文章

Function(Function(F...

[题目描述]: 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,20,20) 如果a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,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) 这是个简单的递归函数,但实现起来可能会有些问题.当a,b,c

function,new function,Function,new Function 之间的区别

测试一: var fud01 = function()  { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typeof(fud01)); alert(fud01()); 运行结果: function 300 最普通的function使用方式,定一个JavaScript函数.在大扩号内的变量作用域中,this指代fud01的所有者. 测试二: var fud02 = new function() { var t

$(function(){})与 (function(){})() (function($){})() 的区别

1. $(function(){ }) 或 jQuery(function(){ }) 此函数也可以写成 jQuery(function(){ }), 用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在.不可用于存放开发插件的代码,因为jQuery对象没有得到传递,外部通过jQuery.method也调用不了其中的方法(函数). 2. (function(){})() 或  function(){ })(jQuery) 此函数也可以写成   function(){ })(jQuery)

js调用函数时括号加与不加的区别,function()&amp;function

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>当前系统时间</title> <link rel="stylesheet" href="style.css" /> <scri

javascript 中function(){},new function(),new Function(),Function 简单介绍

函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系. function使用方式 var foo01 = function() //或 function foo01() { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typeof(foo01)); // function alert(foo01()); // 30

Window Function--the function of window function

From :http://blog.sina.com.cn/s/blog_6163bdeb0102dqhq.html 窗函数是频谱分析中一个重要的部分,窗函数修正了由于信号的非周期性并减小了频谱中由于泄露而带来的测量不准确性. 快速傅里叶变换假定了时间信号是周期无限的.但在分析时,我们往往只截取其中的一部分,因此需要加窗以减小泄露.窗函数可以加在时域,也可以加在频域上,但在时域上加窗更为普遍.截断效应带来了泄漏,窗函数是为了减小这个截断效应,其设计成一组加权系数.例如,一个窗函数可以定义为:w(

javascript中的Function与Object,function与object

function与object是数据类型,Function与Object是两个函数对象的标识符(等价于两个函数对象),Function与Object的数据类型都是function. 首先我们看下面的例子(typeof 表示数据类型,instanceof表示实例类型---用原型链查找): var a = function(){}; var b = {}; var c = 1; var d; var e = null; var f = false; var g = ""; console.

STL——前闭后开区间表示法和function call 操作符

前开后闭开区间表示法[) 任何一个STL算法,都需要获得由一对迭代器(泛型指针)所标示的区间,用以表示操作范围,这一对迭代器所标示的是个所谓的前闭后开区间,以[first,last)表示,也就是说,整个实际范围从first开始,直到last-1.迭代器last所指的是“最后一个元素的下一位置”.这种off by one(偏移一格,或说pass the end)的标示法,带来了很多方便,例如下面两个STL算法的循环设计,就显得干净利落: template<class InputIterator,c

C++11学习笔记之三lamda表达式,std::function, std::bind

//lamda //first lamda [] {}; // second lamda []() //or no need () when paramater is null { std::cout << "second" << std::endl; }();// last add(), express will call this lamda func // 3 with return type auto kkk = []() { return 1; }()