问题:把M个相同的苹果放在N个相同的盘子里。同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

例子 : 1

7 3 ---------------8

5 5---------------7

思路:

当m>n时候 dp(m,n) 能够理解由  在每一个盘子里放一个苹果后剩下的再任意放入n个盘子dp(m-n,n)的状态+最少一个盘子不放dp(m,n-1)

当m==n时,此时分两种情况讨论。一种是一个盘子里放一个,仅仅是一种,另外一种是,至少有一个盘子里不放苹果这就相当于是dp(m,m-1);

当m<n时,由于此时最多仅仅能放到m个盘子中去(一个里放一个),实际上就相当于把m个苹果放到m个盘子里一样,也就是dp(m,m);

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int f(int m,int n)
{
if(m<0)
return 0;
if(n==1||m==1)
return 1;
return f(m-n,n)+f(m,n-1);//最少一个不放
}
int main()
{
int n,m;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
printf("%d\n",f(n,m));
}
}

加上动态
方法:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int M = 105;
int dp[M][M];//m个苹果放到 n个盘子里
void init()
{
dp[0][0]=dp[1][1]=1;
for(int i=2; i<=M-1; i++)
{
dp[i][1]=1; //仅仅有一个盘子就仅仅有一种放法
for(int j=2; j <= i; j++)
{
int k;
if(i-j<j)//m>n 相当于每一个盘子里面放一个剩下的再放
{
k=i-j;
}
else
{
k=j;
}
dp[i][j] = dp[i-j][k]+dp[i][j-1];
}
}
}
int main()
{
int t;
scanf("%d",&t);
init();
while(t--)
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d\n",dp[m][n]);
}
}

放苹果(整数划分变形题 水)poj1664的更多相关文章

  1. 666:放苹果(划分dp)

    666:放苹果 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示 ...

  2. hdu 1398 整数划分变形 (母函数)

    有1,4,9,16,25.....2^17这么多面值的硬币,问任意给定一个不大于300的正整数面额,用这些硬币来组成此面额总共有多少种组合种数 比如10全14 + 6个 14+4+1+19+1 求(1 ...

  3. hdu-2709整数划分 技巧

    整数划分变形,由2^k组成. 整数划分中一个节约内存的技巧,平时我们使用dp[i][j]维护用不大于j的数组合成i的方案数,所以必须dp[i-j][j]->dp[i][j].这样就需要二位,如果 ...

  4. poj1664 放苹果(DPorDFS)&&系列突破(整数划分)

    poj1664放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33661   Accepted: 20824 Desc ...

  5. POJ1664(整数划分)

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30894   Accepted: 19504 Description ...

  6. 放苹果(poj1664递归)

    ti放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24392   Accepted: 15513 Descripti ...

  7. POJ1664 放苹果 (母函数)

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37515   Accepted: 23090 Description ...

  8. [POJ1664]放苹果(动态规划)

    [POJ1664]放苹果 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第 ...

  9. poj1664放苹果(递归)

    题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

随机推荐

  1. [Javascript]js判断是否为undefined类型

    概述 在项目获取某个元素的值会出现undefined,所以对这种情况要有特殊处理. 可通过下面的代码判断是否为undefined类型. if (typeof(reValue) == "und ...

  2. 取代Promise的Generator生成器函数

    接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还有一种常用的解决方案,它就是Ge ...

  3. Python开发网络爬虫抓取某同城房价信息

    前言: 苦逼的我从某某城市换到另一个稍微大点的某某城市,面临的第一个问题就是买房,奋斗10多年,又回到起点,废话就不多说了,看看如何设计程序把某同城上的房价数据抓取过来. 方案:方案思路很简单,先把网 ...

  4. [ubuntu Setup] ubuntu 14.10 安装 JDK

    from :  http://www.cnblogs.com/plinx/archive/2013/06/01/3113106.html 1.到 Sun 的官网下载 http://www.oracle ...

  5. go/golang init()方法的调用

    go/golang main() init()方法的调用 u011156212 · 2015-10-20 13:00:05 · 9965 次点击 · 预计阅读时间 1 分钟 · 27分钟之前 开始浏览 ...

  6. ZOJ 3792 Romantic Value 最小割(最小费用下最小边数)

    求最小割及最小花费 把边权c = c*10000+1 然后跑一个最小割,则flow / 10000就是费用 flow%10000就是边数. 且是边数最少的情况.. #include<stdio. ...

  7. 增强学习--Q-leraning

    Q-learning 实例代码 import numpy as np import random from environment import Env from collections import ...

  8. Python学习笔记(七)函数的使用

    python中的函数使用较简单,这里列出值得注意的几点:   内嵌函数   例如: # coding: utf-8 def foo(): def bar(): print 'bar() called. ...

  9. rails手脚架(scaffold)功能

    scaffold是一个高速开发rails应用的代码框架.能够使用一条命令实现CRUD操作. 1: 创建一个应用 rails new scaffoldapp cd scaffoldapp rails s ...

  10. MyTools

    using UnityEditor; using UnityEngine; using System.IO; using System.Collections; using System.Collec ...