題目:uva10306 - e-coins(記憶化搜尋)
題目大意:給出n個硬幣,每個硬幣有對應的x和y,ecoin的值= sqrt(x * x + y * y).問這些硬幣能否得到給定的ecoin。能的話輸出最小的組成數目。不能酒輸出not possible。
解題思路:這裡的x和y並不是指定是乙個硬幣的x或y,可以是多個硬幣來組成這個ecoin的值。例如 3 0 和 0 4 是可以組成ecoin5的。
所以這裡用dp【x】【y】表示達到x和y這個狀態時,最少要幾個coin。
dp【x】【y】 = min (dp【x - v【i】.x】dp【y - v【i】.y] + 1) 【i >= 1 && i <= m】 , m 代表給定的硬幣的個數。
對於給定的ecoin,就要找出滿足 x * x + y * y = ecoin的所有的x。然後用記憶化搜尋一下答案,取最小值。這裡有找不到的情況,也有沒有找的情況。這兩個情況要區分開。
**:
#include #include #include const int n = 45;
const int maxn = 305;
const int inf = 0x3fffffff;
int value[n][2];
int dp[maxn][maxn];
int n, s;
int min (const int a, const int b)
void init () */
}int dp (int x, int y)
if (ans == inf)
ans = inf + 1; //代表這些硬幣不論怎麼組成都不能得到這樣的x和y
return ans;
}int main ()
if (ans == inf)
printf ("not possible\n");
else
printf ("%d\n", ans);
} return 0;
}
UVA 10306 e Coins(二維完全揹包)
題意 e coin有兩個價值x,y,現在給你乙個價值n,給你幾種e coin,問你能否用最小的e coin數得到所求的價值n n x1 x2 xn 2 y1 y2 yn 2。思路 物品個數沒有限制,則就要想到完全揹包。但是此時如何揹包就要退而求解。dp i j 表示能選到x的總和為i,y的總和為j時...
UVa 10306 e Coins(二維完全揹包)
題目 有n種物品,每種物品有x,y兩個價值,並且可以有無限多個。給定s,使得 x1 x2 2 y1 y2 2 s 2。並且物品個數最少。思路 既然是物品個數沒有限制,則就要想到完全揹包。但是此時如何揹包就要退而求解。dp i j 表示能選到x的總和為i,y的總和為j時,最少的物品選擇數。此時還有個隱...
uva 10118 免費糖果 深搜 記憶化搜尋
uva 10118 include include define n 45 define c 22 int max int a,int b int pile 4 n f n n n n n,top 4 int dfs int s,int hash c if s 5 籃子滿了,末狀態 return f...