• poj1664 放苹果 <整数拆分>


    链接:http://poj.org/problem?id=1664

    View Code
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 using namespace std;
     7 int dp[12][12];
     8 void fuck(  )
     9 {
    10     dp[1][1]=1;     
    11     for( int i=2; i<12; ++ i ){
    12         dp[i][1]=dp[1][i]=1;    //一个盘子或者一个苹果时 
    13         for(int j=2; j<12; ++ j ){
    14             if( i>j )           // 苹果数大于盘子数时分两种情况讨论,一种是至少有一个盘子里不放苹果,这样子就相当于dp[i][j-1],
    15                                 //第二种是,先取出j个苹果一个盘子里放一个,再将剩下的i-j个苹果放到n个盘子里去,即dp[i-j][j];       
    16                 dp[i][j]=dp[i-j][j]+dp[i][j-1];
    17             else if(i==j) dp[i][j]=dp[i][j-1]+1;// 苹果数等于盘子数时分两种情况讨论,一种是一个盘子里放一个,只是一种,
    18                                                 //第二种是,至少有一个盘子里不放苹果这就相当于是dp[i][j-1]; 
    19                 else dp[i][j]=dp[i][i];   // 苹果数小于盘子数时  最多放苹果数的盘子 
    20         }
    21     }
    22 }
    23 int main( )
    24 {
    25     int T, N, M;
    26     fuck( );
    27     scanf( "%d", &T );
    28     while( T -- ){
    29         scanf( "%d%d", &N, &M);
    30         printf( "%d\n", dp[N][M] );
    31     } 
    32     return 0;
    33 }

     链接:http://acm.nankai.edu.cn/p1046.html

    整数拆分的本质就是放苹果, 不过有点要求就是N个苹果必须放在N个盘子里。

    View Code
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <cmath>
     6 #include <algorithm>
     7 using namespace std;
     8 int dp[100][100];
     9 
    10 int fuck1(int n,int m)// 递归版本 
    11 {
    12     if((n<1)||(m<1)) return 0;
    13     if(n==1||m==1) return 1;
    14     if(n<m) return fuck1(n,n);
    15     if(n==m) return fuck1(n,m-1)+1;
    16     return fuck1(n,m-1)+fuck1(n-m,m);
    17 }
    18 
    19 void fuck(  )//非递归 
    20 {     
    21     for( int i=1; i<=80; ++ i ){
    22         dp[i][1]=dp[1][i]=1;    
    23         for(int j=2; j<=80; ++ j ){
    24             if( i>j ) {
    25                 dp[i][j]=dp[i-j][j]+dp[i][j-1];
    26             }          
    27                 
    28             else if( i==j ) {
    29                 dp[i][j]=dp[i][j-1]+1;
    30             } 
    31             else if( i<j ){
    32                 dp[i][j]=dp[i][i];
    33             }
    34         }
    35     
    36     }
    37 }
    38 int main( )
    39 {
    40     int T, N, M;
    41     fuck( );
    42     while(  scanf( "%d", &T )==1 ){
    43 
    44         printf( "%d\n", dp[T][T] );
    45     
    46     } 
    47     return 0;
    48 }
  • 相关阅读:
    mysql常用命令
    CSS样式
    定位
    background
    文本属性和字体属性
    超链接导航案例
    margin塌陷
    浮动
    GIT 修改提交地址
    VUE ElementUI 表格多选框实现单选
  • 原文地址:https://www.cnblogs.com/jian1573/p/2637703.html
Copyright © 2020-2023  润新知