aij
的禮物,從左上角開始到右下角(且只能向下和向右),小明可以選擇收穫路徑上的每個單元格的禮物,但必須滿足其值比手中所有禮物的價值都要高,也可以選擇不拿禮物,一直到迷宮右下角時,小明手中有k份禮物總共有多少種方案。
比如 1 2
2 1
長度為k的方案有 2 種,故輸出2.
這道題我個人的思路就是首先把所有的路徑提取出來,這可以利用組合的方法。
然後對每個路徑,求長度為k的上公升序列的個數,這可以利用先求出lis的長度num,再求從num中選出k的組合數。對其求和就行了。
並沒有來得及驗證。
#include
#include
#include
#include
using
namespace
std;
vector
> seqs;
#define maxm 50
#define maxn 50
#define local
#define modnum 1000007
int arr[maxm][maxn];
//n choose k
int combination(int n,int k)
return ((int)sum%modnum);
}void getcombination(int n,int m,vector
>& siseq)
res.push_back(arr[i_index][j_index]);
numseq.push_back(res);
}
}int binsearch(vector
& arr, int x)
else
}if(arr[right]return right;
return left;
};int lis(vector
& arr)
else
//表明需要替換以前的值
}return len;
};int countnum(int n,int m,int k)
return sum;
}int main();
++n1;
}cout
0;}
走迷宮演算法
從起點問題的提出 在遊戲地圖中,如何尋找一條從起點到終點的最短行路線路?資料表達 使用m n大小的byte陣列 來表示地圖,每個位置的狀態用0表示可走,1表示牆,2表示起點,3表示終點,128表示路徑 行走規則有兩種 4方向行走規則 只能從當前點向上,下,左,右 這4個方向行走 8方向行走規則 可以...
老鼠走迷宮
說明 老鼠走迷宮是遞迴求解的基本題型,我們在二維陣列中使用2表示迷宮牆壁,使用1來表示老鼠的行走路徑,試以程式求出由入口至出口的路徑。解法 老鼠的走法有上 左 下 右四個方向,在每前進一格之後就選乙個方向前進,無法前進時退回選擇下乙個可前進方向,如此在陣列中依序測試四個方向,直到走到出口為止,這是遞...
走迷宮問題
1.這個是迷宮,1代表牆,0代表通路。1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0...