POJ 1664 放苹果【DFS/递归】
2015-05-13 18:35
537 查看
因为一瞬间脑子不太清楚,有个地方敲错了,导致了这道水题花了我一些时间,其实很简单....首先想到的是DFS,因为一直在做这个嘛...
DFS代码比较长,好不容易遇到一道容易题,我还剪了剪枝。。。这么水的题,有点多此一举啊
看了看别人的讨论,发现它是一道很简单的递归题,代码非常短。。。有些伤心,以后要多角度考虑问题啊
DFS代码比较长,好不容易遇到一道容易题,我还剪了剪枝。。。这么水的题,有点多此一举啊
#include<stdio.h> int m, n; int total, num; void dfs( int remain, int pre, int plate); int main(void){ int i, t; scanf("%d", &t); while( t--){ scanf("%d%d", &m, &n); total = 0; for( num = 1; num <= n; num++) { //使用盘子数量 dfs( m, 1, 0); } printf("%d\n", total); } return 0; } void dfs( int remain, int pre, int plate){ int a; if( plate == num){ if( remain == 0)total++; return; } if( remain < (num-plate) || remain < pre || remain < pre * (num-plate)) // 说明有的盘子是空的 或存在逆序 return; for( a = pre; a <= remain/(num-plate) + 1; a++){ // 缩小枚举范围 dfs( remain-a, a, plate+1); } return; }很多人的DFS都比我写的简单T0T.....
看了看别人的讨论,发现它是一道很简单的递归题,代码非常短。。。有些伤心,以后要多角度考虑问题啊
#include<stdio.h> int fun( int m, int n){ if( n == 1 || m == 1 || n == 0|| m == 0) return 1; if( m >= n) return fun( m-n, n) + fun( m, n-1); // 要么每个盘子放一个,要么有的盘子不放 else return fun(m,m); // 相当于m个苹果m个盘子 } int main(void){ int i, t, m, n; scanf("%d", &t); while( t--){ scanf("%d%d", &m, &n); printf("%d\n", fun( m, n)); } return 0; }
相关文章推荐
- 【递归】POJ 1664 放苹果
- POJ 题目1664 放苹果(递归)
- POJ 1664 放苹果(DFS)
- POJ:1664 放苹果(递归,思维)
- POJ 1664 放苹果(递归)
- POJ 1664 放苹果 (递归)
- POJ 1664 放苹果(dfs)
- 经典递归问题--放苹果POJ【1664】
- POJ-1664 放苹果(递归的运用)
- poj 1664 放苹果(递归)
- 递归及递推问题系列之 放苹果 poj 1664
- poj--1664--放苹果(递归好体)
- poj 1664 放苹果,递归(深度优先搜索)
- POJ 1664 数苹果(dfs搜索)
- POJ-----1664---放苹果---递归 思维
- POJ 1664 /NYOJ 758 放苹果问题(递归)
- POJ 1664放苹果(递归问题)
- poj--1664--放苹果(递归好体)
- POJ1664 放苹果(dfs)
- POJ1664 放苹果(递归)