題目鏈結
小偉突然獲得一種超能力,他知道未來 t 天 n 種紀念品每天的**。某個紀念品的**是指購買乙個該紀念品所需的金幣數量,以及賣出乙個該紀念品換回的金幣數量。
每天,小偉可以進行以下兩種交易 無限次:
任選乙個紀念品,若手上有足夠金幣,以當日**購買該紀念品;
賣出持有的任意乙個紀念品,以當日**換回金幣。
每天賣出紀念品換回的金幣可以立即用於購買紀念品,當日購買的紀念品也可以當日賣出換回金幣。當然,一直持有紀念品也是可以的。
t 天之後,小偉的超能力消失。因此他一定會在第 t 天賣出所有紀念品換回金幣。
小偉現在有 m 枚金幣,他想要在超能力消失後擁有盡可能多的金幣。
輸入第一行包含三個正整數 t,n,m,相鄰兩數之間以乙個空格分開,分別代表未來天數 t,紀念品數量 n,小偉現在擁有的金幣數量 m。
接下來 t 行,每行包含 n 個正整數,相鄰兩數之間以乙個空格分隔。第 i 行的 n 個正整數分別為 pi,
1,pi
,2,…
…,pi
,n
p_, p_, \ldots \ldots ,p_
pi,1,
pi,2
,……
,pi,
n,其中 pi,
jp_
pi,j
表示第 i 天第 j 種紀念品的**。
輸出僅一行,包含乙個正整數,表示小偉在超能力消失後最多能擁有的金幣數量。
6 1 100
5020
2520
2550
305
3 3 100
10 20 15
15 17 13
15 25 16
217
比較明顯的完全揹包問題,容量即價值,每乙個物品的價值即後一天的**減現在的**,我們用 a[i
][j]
a[i][j]
a[i][j
] 記錄第 i
ii 天第 j
jj 個物品的**,dp[
k]
dp[k]
dp[k
] 表示花 k
kk 元獲得的最大收益,則有狀態轉移方程:
d p[
k]=m
ax(d
p[k]
,dp[
k−a[
i][j
]]+a
[i+1
][j]
−a[i
][j]
)dp[k]=max(dp[k],dp[k-a[i][j]]+a[i+1][j]-a[i][j])
dp[k]=
max(
dp[k
],dp
[k−a
[i][
j]]+
a[i+
1][j
]−a[
i][j
])ac**如下:
#include
using
namespace std;
typedef
long
long ll;
int t,n,m,a[
105]
[105
],dp[
10005
],ans=0;
intmain()
for(
int i=
1;i<=t;i++)}
m+=dp[m];}
printf
("%d"
,m);
return0;
}
2020智算之道複賽
共 5 個測試點 每個測試點 20 分 每個測試點限時 1 秒 執行記憶體上限 512mb 咕咕有兩個數字 a,b 它忘記了 a 的前三位 記除去前三位的 a 為 aa 但它記得 a 與 b 滿足 a 0 mod b 即 a 是 b 的倍數。請你幫它求出有多少種滿足條件的 a。注意 a 沒有前導 0...
智算之道 2020智算之道初賽第三場題解
乙個模擬的水題.int main return 0 這個b.卡的直接醉了 按照題意模擬即可 模擬建議使用雙端佇列deque 最好還是陣列吧,deque必須全域性才可以 被deque全域性卡了乙個小時40分鐘 第乙個坑點是注意摸牌順序 可能會wa 第二個坑點是處理摸牌順序 可能會t 第三個坑點是刪牌標...
智算之道 字串
思路 直接列舉字串s全排列顯然複雜度不允許,考慮到字元只有26種,那麼我們考慮貢獻。直接去列舉字串t長度為strlen s 的字串,看對應的字串s的每種字元個數是否一樣。一樣的話,看這個子串是不是被計算過,沒被計算過,對答案貢獻就加1。對於是否貢獻過,我們可以用map來存字串是否出現過,直接存字串比...