zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    WCF 绑定(Binding)
    WCF 配置服务 (02)
    WCF 双工模式
    .NET开源高性能Socket通信中间件Helios介绍及演示
    关于WCF服务在高并发情况下报目标积极拒绝的异常处理
    HTTP状态管理机制之Cookie
    JavaScript 总结几个提高性能知识点
    windows下nginx安装、配置与使用
    Windows下Nginx的安装与配置
    大型架构.net平台篇(WEB层均衡负载nginx)
  • 原文地址:https://www.cnblogs.com/Przz/p/5409685.html
Copyright © 2011-2022 走看看