zoukankan      html  css  js  c++  java
  • 地宫取宝

    dp[i,j,k,v]表示当前坐标(i,j)下,拥有k件物品宝物最大价值为v时,方案的最大数。

    i∈[1,M],j∈[1,N],用别人更新自己,最后输出的是dp[1,1,0,0]

    调用dfs(1,1,0,-1),因为v表示当前取到的宝物的价值。判断都是用v和g[i,j]判断,但是dp更新或者传值都是用v+1

    #include <stdio.h>
    #include <memory.h>
    #include <math.h>
    #include <string>
    #include <string.h>
    #include <vector>
    #include <set>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <map>
    
    
    #define I scanf
    #define OL puts
    #define O printf
    #define F(a,b,c) for(a=b;a<c;a++)
    #define FF(a,b) for(a=0;a<b;a++)
    #define FG(a,b) for(a=b-1;a>=0;a--)
    #define LEN 100
    #define MAX 0x06FFFFFF
    #define V vector<int>
    #define MOD 1000000007
    
    typedef long long ll;
    
    using namespace std;
    
    int N,M,K;
    int g[LEN][LEN];
    ll dp[LEN][LEN][15][15];
    
    ll dfs(int i,int j,int k,int v){
        ll s=0,t;
        if(dp[i][j][k][v+1]!=-1)
            return dp[i][j][k][v+1];
        if(i==M && j==N){
            if(k==K){    //不取 
                dp[i][j][k][v+1]=1;
            }else if(k==K-1 && g[i][j]>v){    //
                dp[i][j][k][v+1]=1;
            }else{
                dp[i][j][k][v+1]=0;
            }
            return dp[i][j][k][v+1];
        }
        t=g[i][j];
        if(t>v){//
            if(i+1<=M)
                s+=dfs(i+1,j,k+1,t)%MOD;    
            if(j+1<=N) 
                s+=dfs(i,j+1,k+1,t)%MOD;    
        }
        //不取
        if(i+1<=M)
            s+=dfs(i+1,j,k,v)%MOD;    
        if(j+1<=N) 
            s+=dfs(i,j+1,k,v)%MOD;
        dp[i][j][k][v+1]=s%MOD;
        return dp[i][j][k][v+1];
    }
    
    int main(){
    //    freopen("D:/CbWorkspace/blue_bridge/地宫取宝_1.txt","r",stdin);
        I("%d%d%d",&M,&N,&K);
        int i,j;
        F(i,1,M+1) F(j,1,N+1) I("%d",&g[i][j]);
        memset(dp,-1,sizeof dp);
        dfs(1,1,0,-1);
        O("%lld
    ",dp[1][1][0][0]%MOD);
        return 0;
    }
  • 相关阅读:
    C++设计模式——代理模式
    C++设计模式——享元模式
    C++设计模式——外观模式
    C++设计模式——装饰模式
    C++设计模式——组合模式
    C++设计模式——桥接模式
    C++设计模式——适配器模式
    C++设计模式——原型模式
    云服务器和虚拟主机的区别
    ES6的Module系统
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8643303.html
Copyright © 2011-2022 走看看