zoukankan      html  css  js  c++  java
  • noi 97 积木游戏

    思路:黑书的例题

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<string>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define Maxn 110
    #define Maxm 100010
    #define LL __int64
    #define Abs(x) ((x)>0?(x):(-x))
    #define lson(x) (x<<1)
    #define rson(x) (x<<1|1)
    #define inf 0x7fffffff
    #define Mod 1000000007
    using namespace std;
    int dp[110][110][110][4];
    struct PP{
        int h[4];
    }p[Maxn];
    int check(PP a,int s1,PP b,int s2)
    {
        int x1,x2,y1,y2;
        if(s1==1){
            x1=a.h[2],y1=a.h[3];
        }
        if(s1==2){
            x1=a.h[1],y1=a.h[3];
        }
        if(s1==3){
            x1=a.h[1],y1=a.h[2];
        }
        if(s2==1){
            x2=b.h[2],y2=b.h[3];
        }
        if(s2==2){
            x2=b.h[1],y2=b.h[3];
        }
        if(s2==3){
            x2=b.h[1],y2=b.h[2];
        }
        if(x1<=x2&&y1<=y2||x1<=y2&&y1<=x2)
            return 1;
        return 0;
    }
    int main()
    {
        int n,i,j,m,k,u,v;
        while(scanf("%d%d",&n,&m)!=EOF){
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++){
                scanf("%d%d%d",&p[i].h[1],&p[i].h[2],&p[i].h[3]);
            }
            for(i=1;i<=3;i++){
                dp[1][1][1][i]=p[1].h[i];
            }
            for(i=1;i<=n;i++){
                for(u=1;u<=3;u++){
                    dp[1][i][i][u]=p[i].h[u];
                }
            }
            for(i=1;i<=m;i++){
                for(j=i;j<=n;j++){
                    for(k=0;k<j;k++){
                        for(u=1;u<=3;u++){
                            dp[i][j][k][u]=max(dp[i][j][k][u],dp[i][j-1][k][u]);
                            for(v=1;v<=3;v++){
                                if(i<m){
                                    dp[i+1][j][j][u]=max(dp[i+1][j][j][u],dp[i][j-1][k][v]+p[j].h[u]);
                                }
                                if(check(p[j],u,p[k],v)){
                                    dp[i][j][j][u]=max(dp[i][j][j][u],dp[i][j-1][k][v]+p[j].h[u]);
                                }
                            }
                        }
                    }
                }
            }
            int ans=0;
            for(i=m;i<=n;i++){
                for(j=1;j<=3;j++){
                    ans=max(ans,dp[m][n][i][j]);
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    关于Python3.7和Python3.6中元组类型数据内存存储问题
    PHP中的语法特点小结
    PHP中的魔术常量
    Python02期(北京)课程笔记索引
    初识python
    Django项目功能执行逻辑流程图之用户页面信息展示和添加
    Django中的Model模型
    浅谈web开发以及django的安装和入门
    对前面知识的重新理解
    8月26号
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3278680.html
Copyright © 2011-2022 走看看