zoukankan      html  css  js  c++  java
  • CF-295D-Greg and Caves(dp+思维)

    题意:http://codeforces.com/problemset/problem/295/D

    思路:

    可以把图形看成上下两个金字塔(极端情况下长方形),dp出以i的长为底,以j为高的三角形数(长方形),再预处理前缀(以i的长为底,以<=j为高),然后就枚举中心行,上下金字塔数相乘,注意两个图形的底边相同导致重复的可能性

      1 #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
      2 #include <cstdio>//sprintf islower isupper
      3 #include <cstdlib>//malloc  exit strcat itoa system("cls")
      4 #include <iostream>//pair
      5 #include <fstream>//freopen("C:\Users\13606\Desktop\Input.txt","r",stdin);
      6 #include <bitset>
      7 //#include <map>
      8 //#include<unordered_map>
      9 #include <vector>
     10 #include <stack>
     11 #include <set>
     12 #include <string.h>//strstr substr strcat
     13 #include <string>
     14 #include <time.h>// srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
     15 #include <cmath>
     16 #include <deque>
     17 #include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
     18 #include <vector>//emplace_back
     19 //#include <math.h>
     20 #include <cassert>
     21 #include <iomanip>
     22 //#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
     23 #include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
     24 using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
     25 //******************
     26 clock_t __START,__END;
     27 double __TOTALTIME;
     28 void _MS(){__START=clock();}
     29 void _ME(){__END=clock();__TOTALTIME=(double)(__END-__START)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
     30 //***********************
     31 #define rint register int
     32 #define fo(a,b,c) for(rint a=b;a<=c;++a)
     33 #define fr(a,b,c) for(rint a=b;a>=c;--a)
     34 #define mem(a,b) memset(a,b,sizeof(a))
     35 #define pr printf
     36 #define sc scanf
     37 #define ls rt<<1
     38 #define rs rt<<1|1
     39 typedef pair<int,int> PII;
     40 typedef vector<int> VI;
     41 typedef unsigned long long ull;
     42 typedef long long ll;
     43 typedef double db;
     44 const db E=2.718281828;
     45 const db PI=acos(-1.0);
     46 const ll INF=(1LL<<60);
     47 const int inf=(1<<30);
     48 const db ESP=1e-9;
     49 const int mod=(int)1e9+7;
     50 const int N=(int)2e3+10;
     51 
     52 ll sq[N][N];
     53 ll sum[N];
     54 
     55 int main()
     56 {
     57     int n,m;
     58     sc("%d%d",&n,&m);
     59     if(m<2)
     60     {
     61         pr("0
    ");
     62         return 0;
     63     }
     64     for(int i=2;i<=m;++i)
     65         sq[i][1]=1;
     66     for(int i=2;i<=n;++i)
     67     {
     68         sq[2][i]=1;
     69         sum[2]=1;
     70         for(int j=3;j<=m;++j)
     71             sum[j]=sq[j][i-1]+sum[j-1],sum[j]%=mod;
     72         ll temp=1;
     73         for(int j=3;j<=m;++j)
     74             temp+=sum[j],temp%=mod,sq[j][i]=temp;
     75     }
     76 //    for(int i=1;i<=n;++i)
     77 //        for(int j=2;j<=m;++j)
     78 //        {
     79 //            pr("%d %d: %lld
    ",j,i,sq[j][i]);
     80 //        }
     81     for(int j=2;j<=m;++j)
     82         for(int i=2;i<=n;++i)
     83         {
     84             sq[j][i]+=sq[j][i-1];
     85             sq[j][i]%=mod;
     86         }
     87     ll ans=0;
     88 //    for(int i=2;i<=m;++i)sq[i][0]=1;
     89     for(int i=1;i<=n;++i)
     90     {
     91         for(int j=2;j<=m;++j)sum[j]=sq[j][n-i];
     92         for(int j=3;j<=m;++j)sum[j]+=sum[j-1],sum[j]%=mod;
     93         ans+=sq[2][i]*(m-2+1)%mod;
     94         ans%=mod;
     95         ll temp=0;
     96         for(int j=3;j<=m;++j)
     97             ans+=sq[j][i]*(m-j+1)%mod,ans%=mod;
     98         for(int j=3;j<=m;++j)
     99         {
    100             temp+=sum[j-1];
    101             temp%=mod;
    102             temp+=sq[j-1][n-i];
    103             temp%=mod;
    104             ans+=sq[j][i]*temp%mod*(m-j+1)%mod;
    105             ans%=mod;
    106         //    temp+=sum[j];
    107         }
    108     }
    109     pr("%lld
    ",ans);
    110     return 0;
    111 }
    112 
    113 /**************************************************************************************/
  • 相关阅读:
    Django Rest framework 之 节流
    Django Rest framework 之 权限
    Django Rest framework 之 认证
    url参数和字典的相互转化
    Ajax之跨域请求
    爬虫之爬取B站关键字
    Django之ModelForm组件
    C语言逻辑运算符顺序
    2.4.4 N-S流程图表示法
    2.4.3 三种基本结构和改进的流程图
  • 原文地址:https://www.cnblogs.com/--HPY-7m/p/12594093.html
Copyright © 2011-2022 走看看