日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

csu1646 HearthStone

發(fā)布時間:2023/12/29 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 csu1646 HearthStone 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


好久沒有寫dp,這題算很基礎(chǔ).
dp首先定義狀態(tài):dp[i][j][k]:當(dāng)進(jìn)行到第i輪,達(dá)拉然法師出場j個,刺骨使用k次情況下的最大傷害。
仔細(xì)考慮,還有每輪的費用,法師,刺骨使用幾張的情況這些并不需要定義成狀態(tài)。開始我想復(fù)雜,把這些也定義成狀態(tài),結(jié)果狀態(tài)轉(zhuǎn)移方程反而不好寫。這里就要思考一個變換過程中并不是要把每一個變換都設(shè)置為狀態(tài)的一個變量,只要拍你定義的狀態(tài)容易寫出狀態(tài)轉(zhuǎn)移方程,并能正確求解這個過程就是好的dp解法。
定義好了狀態(tài):就是考慮每輪在費用一定的情況下,你可以選擇 只有添加法師和刺骨數(shù)量的不同。這樣狀態(tài)轉(zhuǎn)移方程就可以慢慢推。注意一個條件在某一輪內(nèi),若在使用刺骨之前使用過至少一張卡,則可額外造成2點傷害,分情況轉(zhuǎn)移一下!

#include<bits/stdc++.h> using namespace std; int dp[25][210][210];//定義dp[i][j][k] 定義當(dāng)前i輪過后使用了j張法師,k個刺骨的最大傷害 int main() {int T;scanf("%d",&T);while(T--){int r,n,m;scanf("%d%d%d",&r,&n,&m);memset(dp,-1,sizeof(dp));dp[1][0][0]=0;for(int i=1;i<r;i++){for(int j=0;j<=n;j++){for(int k=0;k<=m;k++){if(dp[i][j][k]==-1) continue;int f=(i+1)<10 ? (i+1): 10;for(int d=0;d<=f/3;d++){if(j+d<=n){for(int c=0;c<=f/2;c++){if(k+c<=m&&d*3+c*2<=f){if(d==0&&c!=0) dp[i+1][j][k+c]=max(dp[i+1][j][k+c],dp[i][j][k]+j+(j+d+4)*c-2);else dp[i+1][j+d][k+c]=max(dp[i+1][j+d][k+c],dp[i][j][k]+j+(j+d+4)*c);}}}}}}}int maxn=0;for(int i=0;i<=n;i++){for(int j=0;j<=m;j++){maxn=max(maxn,dp[r][i][j]);}}printf("%d\n",maxn);} }

總結(jié)

以上是生活随笔為你收集整理的csu1646 HearthStone的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。