• Educational Codeforces Round 80 (Rated for Div. 2)C(DP)


     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 const long long mod = 1e9+7;
     5 long long pre[1007][1007],temp[1007][1007];
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(NULL);
     9     cout.tie(NULL);
    10     int n,m;
    11     cin>>n>>m;
    12     for(int i=1;i<=n;++i){
    13         pre[1][i]=1;
    14         temp[1][i]=1;
    15     }
    16     for(int i=2;i<=m;++i)//当前位
    17         for(int j=1;j<=n;++j)//第i位以数字j结尾
    18             for(int k=1;k<=j;++k)//保证非降序
    19                 pre[i][j]=(pre[i][j]+pre[i-1][k])%mod;//状态转移
    20     for(int i=2;i<=m;++i)//当前位
    21         for(int j=1;j<=n;++j)//第i位以数字j结尾
    22             for(int k=j;k<=n;++k)//保证非升序
    23                 temp[i][j]=(temp[i][j]+temp[i-1][k])%mod;//状态转移
    24     long long ans=0;
    25     for(int i=1;i<=n;++i)//枚举第二个数组以数字i作为结尾
    26         for(int j=1;j<=i;++j)//枚举第一个数组以数字j作为结尾,j<=i保证了第一个数组最大的都小于等于第二个数组最小的,所以整个数组全部满足小于等于关系
    27             ans=(ans+(temp[m][i]*pre[m][j])%mod)%mod;//相乘得到答案
    28     cout<<ans;
    29     return 0;
    30 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    UVALive 6319 暴力
    UVALive 6322 最大匹配
    uvalive 6323 状态压缩DP
    hdu 3874 树状数组
    hdu 3721 树的直径
    hdu 4258 斜率DP
    组队练习 2011年福州全国邀请赛
    FZU 2041 二分枚举
    Kafka基础教程(三):C#使用Kafka消息队列
    Kafka基础教程(二):Kafka安装
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12196064.html
Copyright © 2020-2023  润新知