- 浏览: 1653740 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
问题:
We all love recursion! Don't we?
Consider a three-parameter recursive function w(a, b, c):
if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns:
1
if a > 20 or b > 20 or c > 20, then w(a, b, c) returns:
w(20, 20, 20)
if a < b and b < c, then w(a, b, c) returns:
w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)
otherwise it returns:
w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)
This is an easy function to implement. The problem is, if implemented directly, for moderate values of a, b and c (for example, a = 15, b = 15, c = 15), the program takes hours to run because of the massive recursion.
Input
The input for your program will be a series of integer triples, one per line, until the end-of-file flag of -1 -1 -1. Using the above technique, you are to calculate w(a, b, c) efficiently and print the result. For example:1 1 1 2 2 2 10 4 6 50 50 50 -1 7 18 -1 -1 -1
Output
Print the value for w(a,b,c) for each triple, like this:w(1, 1, 1) = 2 w(2, 2, 2) = 4 w(10, 4, 6) = 523 w(50, 50, 50) = 1048576 w(-1, 7, 18) = 1
分析:
这个问题直接递归写,效率相当低,当 a = 15, b = 15, c = 15,就得运行好几个小时才能出来结果。
这个问题其实应该是最简单的一种动态规划题目了,因为递推式已经给出了。而动态规划的难点
在于构造出递推式。当时熟悉用程序求解递推式,也是动态规划的三个步骤之一(最优解结
构分析、构造递推式、自底向上求解递推式[也可以递归的lookup式的])
此题只需要从底向上求解下面递推式就行:
w(a,b,c) = if a <= 0 or b <= 0 or c <= 0 return 1;
else if a > 20 or b > 20 or c > 20 return w(20, 20, 20);
else if a < b and b < c, then w(a, b, c) w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c);
else 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 va(int i,int j,int k){
- if(i <= 0 || j <= 0 || k <= 0) return 1;
- return a[i][j][k];
- }
java 代码
可以减少不少判断。
自底向上求解:
cpp 代码:
- void computeW(){
- int i,j,k;
- for(i = 1; i < 21; i++)
- for(j = 1; j < 21; j++)
- for(k = 1; k < 21; k++){
- if(i < j && j < k)
- a[i][j][k] = va(i,j,k-1) + va(i,j-1,k-1) - va(i,j-1,k);
- else
- a[i][j][k] = va(i-1,j,k) + va(i-1,j-1,k) + va(i-1,j,k-1) - va(i-1,j-1,k-1);
- }
- }
都计算完了,输入什么就返回什么吧:
java 代码
- int w(int i,int j,int k){
- if(i <= 0 || j <= 0 || k <= 0)
- return 1;
- if(i > 20 || j > 20 || k > 20)
- return a[20][20][20];
- else
- return a[i][j][k];
- }
完整的代码:cpp 代码
- #include<iostream></iostream>
- using namespace std;
- int a[21][21][21];
- int va(int i,int j,int k){
- if(i <= 0 || j <= 0 || k <= 0)
- return 1;
- return a[i][j][k];
- }
- void computeW(){
- int i,j,k;
- for(i = 1; i < 21; i++)
- for(j = 1; j < 21; j++)
- for(k = 1; k < 21; k++){
- if(i < j && j < k)
- a[i][j][k] = va(i,j,k-1) + va(i,j-1,k-1) - va(i,j-1,k);
- else
- a[i][j][k] = va(i-1,j,k) + va(i-1,j-1,k) + va(i-1,j,k-1) - va(i-1,j-1,k-1);
- }
- }
- int w(int i,int j,int k){
- if(i <= 0 || j <= 0 || k <= 0)
- return 1;
- if(i > 20 || j > 20 || k > 20)
- return a[20][20][20];
- else
- return a[i][j][k];
- }
- int main(){
- int i,j,k;
- computeW();
- while(cin>>i>>j>>k){
- if(i==-1 && j==-1 && k==-1)
- break;
- cout << "w(" << i << ", " << j << ", " << k <<")" <<" = " << w(i,j,k) << endl;
- }
- return 0;
- }
发表评论
-
二分查找之变型题目
2010-10-24 12:40 2158二分查找算法在各个公司的笔试面试题大量出现,通常不是简单一眼就 ... -
一道笔试题(创新工厂)解法
2010-10-21 17:44 1855一个帖子http://www.iteye.com/topic/ ... -
[zz]大数据量,海量数据 处理方法总结
2010-08-27 22:24 2273大数据量的问题是很多面试笔试中经常出现的问题,比如baidu ... -
Trie and suffix array
2010-04-13 20:54 1927字典数Trie和后缀数组suffix array是处理字符串操 ... -
金币问题
2009-11-09 08:41 2018今年某公司的笔试题: 一个矩阵地图,每一个元素值代表金币数, ... -
楼梯问题
2009-11-09 08:19 1577hl给我的几道某公司的算法题: 1、 有个 100 级的 ... -
一道考察模拟乘法的题目
2009-11-07 22:37 1422今天hl和我讨论一道题目: 写道 整形数组如a={1,4, ... -
链表归并
2009-11-07 21:40 1038以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过 ... -
找出出现次数超过一半的数字
2009-11-07 21:23 1891hl同学问我一道这个题,想了一种方法,感觉还是不错的,只扫描一 ... -
有道难题以超低分晋级
2009-06-10 11:36 1568有道难题比赛居然晋级了,可以领到一个t-shirt。 -
逆序数/逆序数对
2009-06-09 23:17 3785逆序数是个常遇到的问题,主要有两种解法: O(n^2)的方法: ... -
有道难题topcoder
2009-05-31 23:55 2461今天做了有道topcoder的题目,也是第一次在topcode ... -
百度之星第一场题目
2009-05-31 00:03 3654由于不符合参赛条件,未能参加百度之星,看了题目还挺有意思,把题 ... -
一个对字符串很好的Hash函数ELFHHash
2009-05-03 21:41 2282#include<stdio.h> #defin ... -
最大流Ford-Fulkerson算法
2009-04-22 17:33 9687算法导论对最大流算法有很详细的介绍,今天实现了最大流Ford- ... -
大数/高精度加减乘除取模[收藏]
2009-04-16 19:38 5068#include <iostream> #i ... -
带重复数字的全排列
2009-04-16 18:58 3894上次gx同学问我一道又重复数字的全排列的问题,我当时用set保 ... -
差分约束系统
2009-04-15 16:00 3747(本文假设读者已经有以下知识:最短路径的基本性质、Bellma ... -
二分图匹配
2009-04-15 15:40 3730二分图最大匹配的匈牙利算法 二分图是这样一个图,它的顶点可以分 ... -
线段树
2009-03-24 10:58 1688把问题简化一下: 在自然数,且所有的数不大于30000的 ...
相关推荐
Pku acm 第1579题 Function Run Fun 代码,有详细的注释,动态规划
接下来,Pku ACM 1579 "Function Run Fun" 是一个三参数递归函数的问题。由于递归调用的次数过多,会导致超时(TLE)。通过动态规划,我们可以避免重复计算,将结果存储在一个三维数组中,自底向上逐步计算到目标...
第二个题目“Pku acm 1579 Function Run Fun”涉及一个三参数递归函数。由于直接递归会导致超时,我们采用动态规划的方法,预计算并存储所有可能的函数结果。从基本情况`w(0,0,0)`开始,逐步填充三维数组直到`w(20,...
2. **Pku ACM 1579 Function Run Fun**: 这题涉及到一个三参数的递归函数,若直接使用递归可能导致超时(TLE)。因此采用动态规划,从基本情况(a, b, c 均为 0)开始,逐步填充一个三维数组,存储所有可能的函...
2. **Pku ACM 1579 Function Run Fun**:这是一个涉及三维递归函数的问题。直接使用递归会导致超时(TLE)。因此,我们使用动态规划的方法,预先计算并存储所有可能的函数调用结果。从基本情况`w(0,0,0)`开始,逐步...
2. **题目2: Function Run Fun(Pku acm 1579)** 这是一个三参数的递归函数,使用动态规划进行优化。由于直接递归会导致超时(TLE),所以采用自底向上的方法,预先计算并存储所有可能的函数值。这里使用了一个三维...
* 1579 Function Run Fun * 1887 Testing the CATCHER * 1953 World Cup Noise * 2386 Lake Counting 简单、模拟题 简单、模拟题是 POJ 上的基础题目,它们通常不需要复杂的算法设计和实现。以下是一些推荐的题目...
使用一个关键字class 和后面加上一个你想要的类名以及加上一对大括号, 这样一个类的结构 就定义出来了,只要在里面写代码就可以了,但是里面写什么?能写什么?怎样写才是一个完整的 类呢?上面讲过来,使用类是...
Thread_rfc_com->RunFunction(fun_handle); wxLogMessage(_("SAP正在获取项目基本信息...")); pool_basic = Thread_rfc_com->GetResult(wxT("OT_PROJ"),fun_handle_desc,fun_handle); wxLogMessage(_("SAP正在...
在这段代码中,我们定义了一个名为`fun_timer`的简单函数,该函数将在1秒后被`Timer`对象调用。`Timer`的第一个参数表示等待的时间(以秒为单位),第二个参数是要执行的函数名称。 #### 实现重复执行的定时器 ...
tetris 俄罗斯方块全局函数说明全局函数 function dlImg参数:img(string)功能:生成并返回一个image对象全局函数 function loadAllImg参数:img(Array)参数:sw(int)参数:fun(function)功能:下载图片,按照sw的...
1408 The Fun Number System 简单题 1486 Color the Tree 简单题 1487 Playing Cards 简单题 1489 2^x mod n = 1 简单题,应该有好算法,不过枚举就可以过…… 1503 One Person "The Price is Right" 简单题,...
1408 The Fun Number System 简单题 1486 Color the Tree 简单题 1487 Playing Cards 简单题 1489 2^x mod n = 1 简单题,应该有好算法,不过枚举就可以过…… 1503 One Person "The Price is Right" 简单题,...
发电机乐趣玩安装 npm install运行代码每个步骤文件夹都可以运行(下面有更多解释),每个文件夹都有脚本: npm run start:1运行“ step1”目录npm run start:2运行“ step2”目录npm run start:3运行“ step3”目录...
使用`final`关键字可以限定一个类不能被继承,或者一个方法不能被子类重写。这通常用于创建某些不希望被其他类扩展或者方法不希望被修改的类或方法。 例如: ```php final class Person { var $name; var $age; ...
在JavaScript编程中,"fun-rate-limit" 是一个用于限制异步操作执行频率的工具,它可以从Stack Overflow上的问题和答案中获取灵感。这个库的主要目的是防止过于频繁的API调用,以免超过服务提供商的限制或者因为过于...
- **字符串处理**:1256 Anagram检测字符串是否为变位词,1579 Function Run Fun处理字符串函数。 - **排序与比较**:1007 DNA Sorting对DNA序列进行排序。 2. **数据结构**: - **树形结构**:1308 Is It A ...
1037 A decorative fence、1050 To the Max、1088 滑雪、1125 Stockbroker Grapevine、1141 Brackets Sequence、1159 Palindrome、1160 Post Office、1163 The Triangle、1458 Common Subsequence、1579 Function ...