zoukankan      html  css  js  c++  java
  • nyoj 206——矩形的个数——————【dp或公式】

    矩形的个数

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:1
     
    描述
    在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形。

    给出A,B,计算可以从中找到多少个矩形。
     
    输入
    本题有多组输入数据(<10000),你必须处理到EOF为止

    输入2个整数A,B(1<=A,B<=1000)

    输出
    输出找到的矩形数。 
    样例输入
    1 2
    3 2
    
    样例输出
    3
    18
    

     dp:

    #include<bits/stdc++.h>
    using namespace std;
    long long dp[1100][1100];
    int main(){
        int A,B,i,j,k;
        for(i=1;i<1010;i++){
            for(j=1;j<1010;j++){
                dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+i*j;
            }
        }
        while(scanf("%d%d",&A,&B)!=EOF){
            printf("%lld
    ",dp[A][B]);
        }
        return 0;
    }
    

      

    公式:

    /*先考虑只有一行的情况,假设有b列 ,可以发现矩形长为b的有1个,b-1有2个,一直到长度为1,有b个 
        则这有(b+b-1+...+2+1) 
        列则一样的情况,(a+a-1+...+2+1),那么有一行,长度为b的有b*a,两行有b*(a-1) 
        。。。 
        那么总共有(b+b-1+...+2+1)*(a+a-1+...+2+1) 
        =(b+1)*b/2 * (a+1)*a/2 
    */
    #include <stdio.h>
    int main() {
        float a, b;
        while ( scanf ( "%f%f", &a, &b ) + 1 )
            printf ( "%.0f
    ", ( a + 1 ) *a * ( b + 1 ) *b / 4 );
    }
     
    

      

  • 相关阅读:
    能用HTML/CSS解决的问题,就不要用JS
    跨域
    从输入url到页面展示到底发生了什么
    hosts 文件
    了解Web及网络基础
    hybrid
    组件化和 React
    MVVM 和 VUE
    虚拟 DOM
    ES6模块化与常用功能
  • 原文地址:https://www.cnblogs.com/chengsheng/p/4526225.html
Copyright © 2011-2022 走看看