[haut] 1281: 邪能炸弹 dp
生活随笔
收集整理的這篇文章主要介紹了
[haut] 1281: 邪能炸弹 dp
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
正在入侵艾澤拉斯的古爾丹偶然間得到了一顆邪能炸彈,經過研究,他發現這是一顆威力極其巨大且難以控制的炸彈。但是精通邪能的古爾丹突然有了一個大膽的想法,他對炸彈進行了一些小小的改造。這使得炸彈需要n天的充能才能爆炸,在這n天中,每天炸彈的邪能值都會產生波動,波動值為xi,古爾丹唯一能控制的是使邪能值增加xi或減少xi,如果邪能值小于0或大于MAX,那么炸彈將會損壞并失效。機智如古爾丹當然會做出最優選擇。而作為反抗軍的情報人員,你知道炸彈的初始邪能值為begin,壽命為n天以及每天的波動值xi。你需要知道在第n天炸彈可能達到的最大邪能值。輸入
第一行為一個整數T,表示有T組測試實例。對于測試實例:
第一行為三個整數 n,begin,MAX。1<=n<=50,0<=begin<=MAX,1<=MAX<=1000。
第二行一次為n個整數 x1,x2,x3,x4...xn。1<=xi<=1000
輸出
對于每組測試實例輸出一行,表示第n天炸彈可能達到的最大邪能值,如果炸彈無法避免邪能值低于0或者高于MAX則輸出-1。樣例輸入
2 3 5 10 5 3 73 3 8 5 2 10樣例輸出
10 -1思路:當時的寫的是dfs ac了 可以構造一顆搜索樹 然后搜索就好了
題解是用的dp 設dp[i][j]為第i天時值為j的存在狀態 1為存在 0為不存在 如果dp[i-1][j] = 1 那么可由此推出dp[i][j + Xi] 和 dp[i][j - Xi]的存在狀態
若j在i-1和i階段取值0~Max內都不存在的話 直接可以返回-1了
dfs: #include <iostream> #include <stdio.h> #include <queue> using namespace std; int a[1010]; int n, b, Max; int ans;void dfs(int ret, int t) {if (ret < 0 || ret > Max)return;if (t == n) {ans = max(ans, ret);return;}dfs(ret+a[t], t+1);dfs(ret-a[t], t+1); }int main() {//freopen("1.txt", "r", stdin);int T;scanf("%d", &T);while (T--) {ans = -1;scanf("%d%d%d", &n, &b, &Max);for (int i = 0; i < n; i++)scanf("%d", &a[i]);dfs(b, 0);printf("%d\n", ans);}return 0; } dp:
#include <iostream> #include <stdio.h> #include <cstring> #include <algorithm> using namespace std; int dp[55][1010]; int n, b, Max; int x[55];int main() {//freopen("1.txt", "r", stdin);int T;scanf("%d", &T);while (T--) {scanf("%d%d%d", &n, &b, &Max);for (int i = 1; i <= n; i++)scanf("%d", &x[i]);memset(dp, 0, sizeof(dp));dp[0][b] = 1;int flag;for (int i = 1; i <= n; i++) {flag = 0;for (int j = 0; j <= Max; j++) {if (dp[i-1][j]) {if (j + x[i] <= Max) {dp[i][j + x[i]] = 1;flag = 1;}if (j - x[i] >= 0) {dp[i][j - x[i]] = 1;flag = 1;}}}if (flag == 0) break;}int ans = -1;for (int i = Max; i >= 0; i--)if (dp[n][i]) {ans = i;break;}printf("%d\n", ans);}return 0; }
?
?轉載于:https://www.cnblogs.com/whileskies/p/7287398.html
總結
以上是生活随笔為你收集整理的[haut] 1281: 邪能炸弹 dp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器内核(引擎)及css前缀
- 下一篇: WordPiece