time limit:
1000 ms memory limit:
65536 kb
total submit:
64 accepted:
10 page view:
122status
clarify
description
islands最近在完一款遊戲「爐石傳說」,又名「魔獸英雄傳」。爐石傳說是一款卡牌類對戰的遊戲。遊戲是2人對戰,總的來說,裡面的卡牌分成2類,一類是法術
牌,另一類是隨從
牌(所謂隨從就是怪物)
。為了簡化問題,現在假設隨從牌
的作用是
召喚乙個具有
一定攻擊力的怪物
,法術牌的作用是給某個隨從增加
一定攻擊力。隨從牌和法術牌
的使用都需要
消耗一定的法力值。現在islands有10點法力值,手上有n張牌(islands最多有10張牌,否者他將會被爆牌
t_t),有些是法術牌,有些是隨從牌。islands現在是大劣勢,他想要是利用這10點法力值使得召喚出來的所有隨從的攻擊力
總和最高(法力值可以不用完)。注意,任何法術牌都必須使用在某個
召喚出來的隨從
上,也就是如果
islands
沒有召喚過隨從,
他將不能使用任何法術
牌。告訴islands他
能召喚的隨從的總
攻擊力最大是多少。
input
首先輸入測試資料組數t(t<=10)每組資料首先輸入乙個n(0<=n<=10),表示islands有n張牌接下來n行每行輸入3個整數 cost(0<=cost<=10),d(0或者1),w(|w|<=1000)。cost表示該牌的法力值消耗,如果d=0,表示該牌是攻擊力為w的隨從牌,如果d=1,表示是能給乙個隨從增加w攻擊的法術牌。
output
對於每組資料輸出按照格式「case #x: a」(不包括冒號)輸出一行。其中x表示第x組測試資料,a表示對應的答案。
211 0 100
11 1 100
case #1: 100case #2: 0
解法:由於這些選擇項都不大,又是取最大值。而且每張牌只能走一次。所以我們很容易想到這是乙個01揹包。但這個必須至少要有1個隨從牌才能有攻擊力。所以我們可以用dp[2]來表示,dp[1]表示已經有隨從了,這個可以達到。dp[0]表示還沒有使用隨從牌。我們可以寫出狀態轉移方程:如果第i個為隨從牌dp[v][1]=max(dp[v-cost[i]][1]+w[i],dp[v][1],dp[v-cost[i]][0]+w[i]).如果第i個牌不是隨從牌,則dp[v][1]=max(dp[v-cost[i]][1]+w[i],dp[v][1],dp[v][0]=max(dp[v-cost[i]][0]+w[i],dp[v][0]]);因為有所要求得有隨從牌的都是由沒隨從牌的情況推出來的,所以邊界條件:dp[0]=0.dp[i]=-100000000.然後跑一次01揹包即可。
ac:#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long int
const
int
maxn=100;
int
cost[maxn],dp[maxn][2],w[maxn],d[maxn];
int
main()
for
(
int
i=0;i<=10;i++)
for
(
int
i=0;i
else
}
}
ans=0;
for
(
int
i=0;i<=10;i++)
printf
(
"case #%d: %d\n"
,k,ans);
}
}
islands打爐石傳說
islands 最近在完一款遊戲 爐石傳說 又名 魔獸英雄傳 爐石傳說是一款卡牌類對戰的遊戲。遊戲是兩人對戰,總的來說,裡面的卡牌分成兩類,一類是法術牌,另一類是隨從牌 所謂隨從就是怪物 為了簡化問題,現在假設隨從牌的作用是召喚乙個具有一定攻擊力的怪物,法術牌的作用是給某個隨從增加一定攻擊力。隨從牌...
CCF 爐石傳說
這題原本想的比較複雜,因為每次召喚隨從或隨從死亡時都要對右邊的隨從編號進行變動,然後構建了鍊錶的資料結構,但是越寫越複雜,所以馬上放棄這個思路。其實只要構建乙個結構體,結構體儲存隨從的health和attack,以及乙個flag表示隨從是否死亡。構建兩個size為8的陣列,用以儲存隨從即可。incl...
CCF爐石傳說
參考了 問題描述 爐石傳說 魔獸英雄傳 hearthstone heroes of warcraft,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下 玩家會控制一些角色,每個角色有自己的生命值和攻...