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;
    }
  • 相关阅读:
    快速排序和随机化快排学习
    P1330 封锁阳光大学 DFS
    P2577 [ZJOI2005]午餐 状压DP
    M. Subsequence 南昌邀请赛
    P1441 砝码称重 DFS回溯+DP
    P2661 信息传递 二分图的最小环
    P1196 [NOI2002]银河英雄传说 带权并查集
    P2024 [NOI2001]食物链 并查集
    F. Shovels Shop 背包DP
    P1514 引水入城 DFS
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3278680.html
Copyright © 2011-2022 走看看