1. 程式人生 > >uva 10118 免費糖果 深搜+記憶化搜尋

uva 10118 免費糖果 深搜+記憶化搜尋

http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html

#include<stdio.h>
#include<string.h>
#define N 45
#define C 22
int max(int a,int b)
{
    return a>b?a:b;
}
int pile[4][N],f[N][N][N][N],n,top[4];
int dfs(int s,int hash[C])
{
    int i,j,ans=0;
    if(f[top[0]][top[1]][top[2]][top[3]]!=-1)
    {
        return f[top[0]][top[1]][top[2]][top[3]];
    }
    if(s==5)//籃子滿了,末狀態
        return f[top[0]][top[1]][top[2]][top[3]]=0;
    int h[C],t[4];
    for(i=0;i<4;i++)
    {
        memcpy(h,hash,sizeof(h));
        if(top[i]!=n)//到n是拿空了
        {
            if(h[pile[i][top[i]]])//拿i堆頂,可以湊對
            {
                h[pile[i][top[i]]]=0;
                top[i]++;
                ans=max(ans,dfs(s-1,h)+1);
            }
            else
            {
                h[pile[i][top[i]]]=1;
                top[i]++;
                ans=max(ans,dfs(s+1,h));
            }
            top[i]--;
        }
    }
    return f[top[0]][top[1]][top[2]][top[3]]=ans;
}
int main()
{
    int i,j,k,l,m;
    while(scanf("%d",&n)&&n)
    {
        memset(pile,0,sizeof(pile));
        for(i=0;i<n;i++)
        {
            for(j=0;j<4;j++)
                scanf("%d",&pile[j][i]);
        }
        memset(f,-1,sizeof(f));
        memset(top,0,sizeof(top));
        int hash[C]={0};
        printf("%d\n",dfs(0,hash));
    }
    return 0;
}


相關推薦

uva 10118 免費糖果 +記憶搜尋

http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html #include<stdio.h> #include<string.h> #define N 45 #define C

問題 C: 調酒壺裏的酸奶 廣+記憶

urn c++ pri possible 外部 需要 main names highlight 問題 C: 調酒壺裏的酸奶 時間限制: 1 Sec 內存限制: 128 MB提交: 284 解決: 97[提交] [狀態] [命題人:外部導入] 題目描述 最近

UVa 免費糖果(記憶搜尋)

在狀態複雜,資訊多且資料小的情況下可以選擇考慮記憶化搜尋.這題我就做的很zz,一開始已知想打一個dp, 不過太麻煩了.看了解題報告之後才發現記憶化搜尋這麼簡單 #include<

UVa 10651 Pebble Solitaire(DP 記憶索)

src output one row max -s turn -- nth Pebble Solitaire Pebble solitaire is an interesting game. This is a game where you are given

UVA-11761-馬爾可夫/記憶

cstring return pro cin push_back 保存 include ini sum https://vjudge.net/problem/UVA-11762     給出一個整數n,每次隨機挑選一個小於等於n的素數,如果是n的因子,n變為n/x ,否則不

bzoj 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果【tarjan+記憶索】

dfs spa 重新 i++ mes RM tar \n () 對這個奇形怪狀的圖tarjan,然後重新連邊把圖變成DAG,然後記憶化搜索即可 #include<iostream> #include<cstdio> using namespace s

UVa 10118 Free Candies (記憶搜尋+狀態壓縮)

題目連結:https://cn.vjudge.net/problem/UVA-10118 思路:設dp[pa][pb][pc][pd]四堆糖分別取到這四堆的第pa、pb、pc、pd顆時最多的pair數, 用一個二進位制串記錄籃中糖的狀態(即哪些糖有那些沒有)。狀態轉移一共四

hdu 1428 挺好的一個題目 記憶搜尋+廣實現迪傑斯特拉

漫步校園 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4369    Accepted Submission

一道題看懂遞迴、(深度索)dfs、記憶搜尋、動態規劃(DP)的差別!

有一個層數為n(n<=1000)的數字三角形。現有一隻螞蟻從頂層開始向下走,每走下一級,可向左下方向或右下方向走。求走到底層後它所經過數字的總和的最大值。 【輸入格式】 第一個整數為n,一下n行為各層的數字。 【輸出格式】 一個整數,即最大值。

uva 437(不用記憶搜尋解)

思路:放程式碼上了 程式碼如下: /* 最優解是max height 最優子結構是以i方塊作為最後一塊的最大長度 子問題的最優解是以前1,2,3...i-1個方塊作為最後一塊的最大長度 顯然:最優子結構包含了子問題的最優解 並且這些子問題的解之間相互獨立(其中一個問題的解,不會影響另

uva 572 簡單的

#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 110; char map[MAXN][MA

uva 707(記憶搜尋)

思路:此題需要記憶化搜尋,dp[x][y][t]表示當前狀態下是否是否有可能點(x,y)上有賊,0表示不可能,1表示可能,然後及時記憶化搜尋。 1 #include<iostream>

Pebble Solitaire+uva+狀態壓縮+記憶搜尋

Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Description Problem A Pebble Solitaire Input: standard in

UVA 1630 記憶搜尋

題意 輸入一個字串,摺疊成一個儘量短的串。問最短可以摺疊成什麼樣子的一個串。 題解 設dp[i][j]為字串i到j摺疊成最短的字串後的長度,ss[i][j]為字串i到j摺疊成的最短的字串。DFS+記憶化搜尋即可。 注意事項 輸入的字串右邊界為s

uva 10285 記憶搜尋

求矩陣中最長遞減路徑的長度,記憶化搜尋,因為要找的路徑是嚴格遞減的,所以不會有回頭路 Sample Input 2 Feldberg 10 5 56 14 51 58 88 26 94 24 39 41 24 16 8 51 51 76 72 77 43 10 38 50

【10.31校內測試】【組合數學】【記憶搜尋/DP】【多起點多終點二進位制拆位Spfa】

Solution   注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long using namespace std; int n, a, b;

icpc 2018 徐州 網路賽 B 博弈+記憶搜尋

In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named "Sena" are playing a video game. The game system of this vide

洛谷P3387 縮點模板(縮點+記憶搜尋

題目連結:https://www.luogu.org/problemnew/show/P3387 如果你還不會Tarjan縮點,我見一你還是先看看這篇部落格:https://www.cnblogs.com/WWHHTT/p/9825766.html 或者過一段時間再來 首先我們分析題目,要求出圖中的一條

BZOJ 1415 聰聰和可可 (Dijkstra預處理 + 期望DP + 記憶搜尋

任重而道遠 Input 資料的第1行為兩個整數N和E,以空格分隔,分別表示森林中的景點數和連線相鄰景點的路的條數。 第2行包含兩個整數C和M,以空格分隔,分別表示初始時聰聰和可可所在的景點的編號。 接下來E行,每行兩個整數,第i+2行的兩個整數Ai和Bi表示景點Ai和景點Bi之間有一條

CodeForces - 208B Solitaire 記憶搜尋

A boy named Vasya wants to play an old Russian solitaire called "Accordion". In this solitaire, the player must observe the following rules: A de