国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

UVA - 10118 Free Candies 記憶化搜索經典

2019-11-08 02:14:40
字體:
來源:轉載
供稿:網友

            思路:d[a][b][c][d]表示從已經第一個籃子取了a顆糖,第二個取了b顆糖,第三個取了c顆糖,第四個取了d顆糖最多還能夠獲得多少糖果。首先明白一個問題:如果能分別取a,b,c,d個,不論如何取,最后籃子中剩余的糖果顏色和個數都是一樣的。那么一旦搜索到一個已經被搜索過得狀態,直接返回即可,沒必要繼續搜索。

  AC代碼:

#include<cstdio>#include<algorithm>#include<cstring>#include<utility>#include<string>#include<iostream>#include<map>#include<set>#include<vector>#include<queue>#include<stack>using namespace std;#define eps 1e-10#define inf 0x3f3f3f3f#define PI pair<int, int> const int maxn = 40 + 2;int cand[4][maxn], n;int d[maxn][maxn][maxn][maxn];int top[4], bit[30];void init() {	bit[0] = 1;	for(int i = 1; i < 22; ++i) bit[i] = bit[i-1] * 2;}int dfs(int color, int cnt) {	if(d[top[0]][top[1]][top[2]][top[3]] != -1) 		return d[top[0]][top[1]][top[2]][top[3]];	if(cnt == 5) return d[top[0]][top[1]][top[2]][top[3]] = 0;	int ans = 0;	for(int i = 0; i < 4; ++i) {		if(top[i] >= n) continue;		int col = ++top[i];		col = bit[cand[i][col]];		if(col & color) { //籃子中已經右該顏色 			 int a = 1 + dfs(color - col, cnt - 1);			 ans = max(ans, a);		}		else {			int a = dfs(color + col, cnt + 1);			ans = max(ans, a);		}		top[i]--;	}	return d[top[0]][top[1]][top[2]][top[3]] = ans;}int main() {	init();	while(scanf("%d", &n) == 1 && n) {		memset(d, -1, sizeof(d));		memset(top, 0, sizeof(top));		for(int i = 1; i <= n; ++i) 			for(int j = 0; j < 4; ++j) 				scanf("%d", &cand[j][i]); 		PRintf("%d/n", dfs(0, 0));	}	return 0;}如有不當之處歡迎指出!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浪卡子县| 榆中县| 贵德县| 重庆市| 如东县| 巢湖市| 从江县| 曲松县| 湟源县| 邵东县| 喜德县| 靖远县| 额敏县| 呼和浩特市| 罗甸县| 慈溪市| 贵港市| 永定县| 历史| 博兴县| 翁牛特旗| 拜城县| 周宁县| 玉环县| 东乌珠穆沁旗| 泰顺县| 保靖县| 合作市| 桦南县| 商都县| 通化市| 蛟河市| 通化县| 马龙县| 三亚市| 紫金县| 日喀则市| 平罗县| 洪洞县| 遂昌县| 邯郸市|