zoukankan      html  css  js  c++  java
  • 【noi 2.6_666】放苹果 & 【noi 2.6_8467】鸣人的影分身(DP)

    这题其实在2.6前面的专题也有出现过,我还以为我有写,结果发现,并没有。于是就现在写了。这2题其实重复了......我就按放苹果的来说。

    题意:把N个苹果放在M个盘子里,允许有的盘子空着不放,问共有多少种不同的分法。

    解法:f[i][j]表示把 i 个苹果放在 j 个盘子的方案数,分有空盘子和无空盘子的情况DP。
     (1)至少有1个空盘子:f[i][j]=f[i][j-1]
     (2)没有空盘子:i≥j,则再 +f[i-j][j]。
             而对于f[i-j][j]有 2 种理解——所有盘子中都取走1个苹果的方案数,或先各用1个苹果把所有盘子填满再放苹果的方案数。--至于这里为什么是“1”就要想想动态规划的基本性质了。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 int f[15][15];
     8 
     9 int main()
    10 {
    11     int T;
    12     scanf("%d",&T);
    13     while (T--)
    14     {
    15       int n,m;
    16       scanf("%d%d",&n,&m);
    17       memset(f,0,sizeof(f));
    18       for (int j=0;j<=m;j++) f[0][j]=1;
    19       for (int i=1;i<=n;i++)
    20         for (int j=1;j<=m;j++)
    21         {
    22           f[i][j]=f[i][j-1];
    23           if (i>=j) f[i][j]+=f[i-j][j];
    24         }
    25       printf("%d
    ",f[n][m]);
    26     }
    27     return 0;
    28 }
  • 相关阅读:
    页面布局
    序列化和反序列化
    虚方法、抽象类
    方法的重载 、重写
    C#委托与事件
    C#中的反射
    SQL用法
    Ubuntu:Unable to locate package ***
    Django 使用mysql 所遇到问题一:Error loading MySQLdb module
    python collection 中的队列
  • 原文地址:https://www.cnblogs.com/konjak/p/5942043.html
Copyright © 2011-2022 走看看