题解:dp,坑爹的是有价值为0的宝物,醉了
439710 | 609738062@qq.com | 地宫取宝 | 03-24 23:18 | 1.550KB | C++ | 正确 | 100 | 0ms | 3.398MB | 评测详情 |
1 #include <cstdio> 2 #include <cstring> 3 #include <stack> 4 #include <vector> 5 #include <algorithm> 6 7 #define ll long long 8 int const N = 55; 9 int const M = 205; 10 int const inf = 1000000000; 11 ll const mod = 1000000007; 12 13 using namespace std; 14 15 int n,m,k; 16 int dp[55][55][15][15]; 17 int c[N][N]; 18 int ans; 19 20 void ini() 21 { 22 memset(dp,0,sizeof(dp)); 23 memset(c,0,sizeof(c)); 24 int i,j; 25 ans=0; 26 for(i=1;i<=n;i++){ 27 for(j=1;j<=m;j++){ 28 scanf("%d",&c[i][j]); 29 c[i][j]++; 30 } 31 } 32 } 33 34 void solve() 35 { 36 int i,j,cnt,v; 37 dp[1][1][0][0]=1; 38 dp[1][1][1][ c[1][1] ]=1; 39 40 for(i=1;i<=n;i++){ 41 for(j=1;j<=m;j++){ 42 if(i==1 && j==1) continue; 43 for(cnt=0;cnt<=k;cnt++){ 44 for(v=0;v<=13;v++){ 45 dp[i][j][cnt][ v ] = (dp[i][j][cnt][ v ]+dp[i][j-1][cnt][ v ])%mod; 46 dp[i][j][cnt][ v ] = (dp[i][j][cnt][ v ]+dp[i-1][j][cnt][ v ])%mod; 47 } 48 for(v=0;v<c[i][j];v++){ 49 dp[i][j][cnt+1][ c[i][j] ] = (dp[i][j][cnt+1][ c[i][j] ]+dp[i][j-1][cnt][ v ])%mod; 50 dp[i][j][cnt+1][ c[i][j] ] = (dp[i][j][cnt+1][ c[i][j] ]+dp[i-1][j][cnt][ v ])%mod; 51 } 52 } 53 } 54 } 55 } 56 57 void out() 58 { 59 int v; 60 for(v=0;v<=13;v++){ 61 ans=(ans+dp[n][m][k][v])%mod; 62 } 63 printf("%d\n",ans); 64 } 65 66 int main() 67 { 68 //freopen("data.in","r",stdin); 69 //scanf("%d",&T); 70 // for(cnt=1;cnt<=T;cnt++) 71 //while(T--) 72 while(scanf("%d%d%d",&n,&m,&k)!=EOF) 73 { 74 ini(); 75 solve(); 76 out(); 77 } 78 }
2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
原文:http://www.cnblogs.com/njczy2010/p/4364333.html