題解 hdu5693 D Game 區間DP

2021-08-29 04:35:03 字數 1102 閱讀 6981

題目鏈結

區間dp好題,把區間dp的基本操作都用上了。(狀態轉移方程很多,見**吧)

#include#include#include#includeusing namespace std;

const int n=310;

int t,n,m,a[n],d,dp[n][n],f[n];

bool can[n][n];

mapmp;

int main()

{ //freopen("in.txt","r",stdin);

scanf("%d",&t);

while(t--)

{memset(f,0,sizeof(f));memset(can,0,sizeof(can));memset(dp,0,sizeof(dp));

scanf("%d%d",&n,&m);mp.clear();

for(int i=1;i<=n;i++)

scanf("%d",&a[i]);

for(int i=1;i<=m;i++)

scanf("%d",&d),mp[d]=1;

for(int i=1;i<=n;i++)

for(int j=i+1;j<=n;j++)

if(mp[a[j]-a[i]])can[i][j]=1;

for(int len=1;len<=n;len++)

for(int l=1;l+len<=n;l++)

{int r=l+len;

dp[l][r]=max(dp[l+1][r],dp[l][r-1]);//區間dp基操

if(can[l][r]&&dp[l+1][r-1]==(r-l-1))

dp[l][r]=max(dp[l][r],dp[l+1][r-1]+2);//如果端點構成等差,且中間取空了

for(int i=l;i區間dp好好好題

hdu5693D 遊戲 區間DP 暴力遞迴

主要的收穫是。如何優化你遞推式裡面不必要的決策 之前的 這個 在hdu超時了,這就對了。這個複雜度 但是這個思路非常地耿直。那就是只需要暴力列舉刪兩個和刪三個的情況,於是就非常耿直的列舉是哪兩個n 2,是哪三個n 3 include include include include using nam...

HDU5693 D Game 百度之星2A

連續消去 k 個數,可以表示為消去了若干次 2個數和消去了若干次 3 個數。即k 2 i 3 j,那麼可以消數字就變成了,每次可以消 2 個,或者 3個。f i j 代表i.j 這段數字可以全部消掉,那麼這個狀態可以由f i k and f k 1 j f i 1 j 1 and mark a i ...

題解 hdu 素數判定

素數判定 題目描述 對於表示式n 2 n 41,當n在 x,y 範圍內取整數值時 包括x,y 39 xinput 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x 0,y 0時,表示輸入結束,該行不做處理。output 對於每個給定範圍內的取值,如果表示式的值都為素數,則輸出 ok 否則請輸出...