# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
159895 | mdn2002 | Mobitel (COCI19_mobitel) | C++14 | 22 ms | 2552 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
int mod=1e9+7;
long long r,c,n,a[303][303],dp[303][303],all[303][303];
int f(int x,int y,long long p)
{
if(p>=n)return all[x][y];
if(x==r-1&&y==c-1)return 0;
if(x>=r||y>=c)return 0;
if(dp[x][y]*p<n)return 0;
long long ans=0;
ans+=f(x+1,y,p*a[x+1][y]);
ans%=mod;
ans+=f(x,y+1,p*a[x][y+1]);
ans%=mod;
return ans;
}
int fuck(int x,int y)
{
if(x==r-1&&y==c-1)return dp[x][y]=a[x][y];
if(dp[x][y]!=-1)return dp[x][y];
long long t=0;
if(x!=r-1)t=max(t,fuck(x+1,y)*a[x][y]);
if(t>=n)t=n;
if(y!=c-1)t=max(t,fuck(x,y+1)*a[x][y]);
if(t>=n)t=n;
return dp[x][y]=t;
}
int d(int x,int y)
{
if(x==r-1&&y==c-1)return all[x][y]=1;
if(x>=r||y>=c)return 0;
if(all[x][y]!=-1)return all[x][y];
long long ans=0;
ans+=d(x+1,y);
ans+=d(x,y+1);
return all[x][y]=ans;
}
int main()
{
memset(all,-1,sizeof all);
memset(dp,-1,sizeof dp);
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>r>>c>>n;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)scanf("%d",&a[i][j]);
}
d(0,0);
fuck(0,0);
cout<<f(0,0,a[0][0]);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |