• uva 10118(DP)


    UVA 10118

    题意:

    有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,

    如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走多少对糖果。糖果种类最多20种. 


    思路:记忆化搜索

    Orz:在输入的时候不小心写错了,导致一直调试。感觉自己的函数并没有问题,纠结了好久。

    找出问题时瞬间想si

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #include <functional>
    
    using namespace std;
    const int maxn = 50;
    int num[5];
    int tmap[maxn][maxn];
    int dp[maxn][maxn][maxn][maxn];
    bool vis[25];
    int n;
    int fin(int all)
    {
        if(dp[num[1]][num[2]][num[3]][num[4]] != -1)
            return dp[num[1]][num[2]][num[3]][num[4]];
        if(all == 5)
            return dp[num[1]][num[2]][num[3]][num[4]] = 0;
    
    
        int ans = 0;
        for(int i= 1; i <= 4; i++)
        {
            if(num[i]> n)
                continue;
    
    
            if(vis[tmap[i][num[i]]])               //若篮子里面已经有一个
            {
                vis[tmap[i][num[i]]] = false;
                num[i]+=1;
                ans = max(fin(all-1) + 1,ans);
                num[i]-=1;
                vis[tmap[i][num[i]]] = true;
            }
            else
            {
                vis[tmap[i][num[i]]] = true;
                num[i]+=1;
                ans = max(fin(all+1),ans);
                num[i]-=1;
                vis[tmap[i][num[i]]] = false;
    
            }
    
        }
        return dp[num[1]][num[2]][num[3]][num[4]] =ans;
    }
    
    int main()
    {
        while(scanf("%d",&n) && n)
        {
            for(int j = 1; j <= n; j++)
                for(int i = 1; i <=4; i++)
                    scanf("%d",&tmap[i][j]);
            num[1] = num[2] = num[3] = num[4] = 1;
            memset(dp,-1,sizeof(dp));
            memset(vis,false,sizeof(vis));
            printf("%d
    ",fin(0));
        }
        return 0;
    }
    

      

  • 相关阅读:
    zabbix agent安装(三)
    获取hudson持续构建编译结果的一种方法
    一些C/C++中的函数
    设置页眉的章节及标题方法
    编译64位geos库的经验总结
    无法定位程序输入点到_ftol2于动态链接库msvcrt.dll的错误的解决
    Java学习笔记(二)
    初学网络协议
    HTTPS与SSL(二)
    HTTPS与SSL(一)
  • 原文地址:https://www.cnblogs.com/Przz/p/5409685.html
Copyright © 2020-2023  润新知