zoukankan      html  css  js  c++  java
  • [POJ1664]放苹果(动态规划)

    [POJ1664]放苹果

    Description

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

    Input

    第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

    Output

    对输入的每组数据M和N,用一行输出相应的K。

    Sample Input

    1
    7 3

    Sample Output

    8

    考虑dp
    dp[i][j]表示前i个苹果放入前j个盘子中的方案数
    因为可以有盘子不放苹果
    当i<j时,dp[i][j]=dp[i][i] (盘子和苹果均为相同的)
    当i>=j时,此时可能盘子上都有苹果,我们把每个盘子上都拿走一个苹果,方案数不会变。(很妙啊)

    [dp[i][j]=dp[i-j][j] ]

    也可能盘子上没有苹果

    [dp[i][j]=dp[i][j-1] ]

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,dp[15][15];
    void work(){
    	cin>>n>>m;
    	for(int i=0;i<=m;i++)dp[0][i]=1;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			if(i<j)dp[i][j]=dp[i][i];
    			else dp[i][j]=dp[i-j][j]+dp[i][j-1];
    		}
    	}printf("%d
    ",dp[n][m]);
    }
    int main(){
    	ios::sync_with_stdio(false);
    	int t;cin>>t;
    	while(t--)work();return 0;
    }
    
  • 相关阅读:
    Heap(堆)和stack(栈)有的区别是什么。
    i++和++i的深入理解
    JDBC之java数据库的连接与简单的sql语句执行
    java前三本基础知识总结
    数据库的一些基础
    SQL 同时查看2个表
    JMeter 问题
    Linux 常用命令
    java io (一)
    验证密码必须是字母加数字的组合
  • 原文地址:https://www.cnblogs.com/lsgjcya/p/9781598.html
Copyright © 2011-2022 走看看