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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nssl1322,jzoj(初中)2109-清兵线【dp】

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nssl1322,jzoj(初中)2109-清兵线【dp】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題


題目大意

nnn個士兵在不同的位置,自己每秒可以往左移或者往右移動1格,并且干掉改格所在的士兵。
mmm秒,第kkk秒干掉士兵可以獲得m?km-km?k的價值,求最大價值之和。


解題思路

離散化先
然后我們干掉的士兵一定一個線段,所以我們設
fi,j,t,0/1f_{i,j,t,0/1}fi,j,t,0/1?表示第tst\ st?s已經干掉了i~ji\sim jij的士兵,然后在最左邊還是在最右邊

但是我們發現ttt的范圍十分的大,我們考慮轉換。

假設我們總共要干掉kkk個人,如果還剩下zzz個人沒被干掉,那么沒移動一步就會消耗kkk點價值。

那么我們就可以列出新的方程fi,j,k,0/1f_{i,j,k,0/1}fi,j,k,0/1?表示總共要干掉i~ji\sim jij的士兵,然后在最左邊還是在最右邊。

然后因為全程kkk那個維度不會有任何交接我們可以不用記錄,但是還是要枚舉kkk

最終狀態:
fi,j,0/1f_{i,j,0/1}fi,j,0/1?表示總共干掉kkk個人,已經干掉了i~ji\sim jij的人,在最左邊還是在最右邊,

那么我們可以列出動態轉移方程
fi,j,0=max{fi+1,j,0+m?dist(i,i+1)?(k?j+i),fi+1,j,1+m?dist(i,j)?(k?j+i)}f_{i,j,0}=max\{f_{i+1,j,0}+m-dist(i,i+1)*(k-j+i),f_{i+1,j,1}+m-dist(i,j)*(k-j+i)\}fi,j,0?=max{fi+1,j,0?+m?dist(i,i+1)?(k?j+i),fi+1,j,1?+m?dist(i,j)?(k?j+i)}
fi,j,1=max{fi,j?1,1+m?dist(j,j?1)?(k?j+i),fi,j?1,0+m?dist(i,j)?(k?j+i)}f_{i,j,1}=max\{f_{i,j-1,1}+m-dist(j,j-1)*(k-j+i),f_{i,j-1,0}+m-dist(i,j)*(k-j+i)\}fi,j,1?=max{fi,j?1,1?+m?dist(j,j?1)?(k?j+i),fi,j?1,0?+m?dist(i,j)?(k?j+i)}

然后答案就是fl,r(r?l+1=k,mid∈[l..r])f_{l,r}(r-l+1=k,mid\in [l..r])fl,r?(r?l+1=k,mid[l..r])


codecodecode

#pragma GCC optimize(2) #include<cstdio> #include<algorithm> #include<cstring> #include<cctype> using namespace std; const int N=320; int n,m,a[N],ans,K; int f[N][N][2]; inline int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f; } int main() {n=read();m=read();for(int i=1;i<=n;i++)a[i]=read();a[++n]=0;sort(a+1,a+1+n);int mid=lower_bound(a+1,a+1+n,0)-a;for(K=1;K<=n;K++){memset(f,0xcf,sizeof(f));f[mid][mid][0]=f[mid][mid][1]=0;for(int i=mid;i>0;i--)for(int j=mid;j<=n;j++){if(i==j) continue; if(j-i+1>K) break;f[i][j][0]=max(f[i+1][j][0]+m-(a[i+1]-a[i])*(K-j+i),f[i+1][j][1]+m-(a[j]-a[i])*(K-j+i));f[i][j][1]=max(f[i][j-1][1]+m-(a[j]-a[j-1])*(K-j+i),f[i][j-1][0]+m-(a[j]-a[i])*(K-j+i));if(j-i+1==K) ans=max(ans,max(f[i][j][0],f[i][j][1]));} }printf("%d",ans); }

總結

以上是生活随笔為你收集整理的nssl1322,jzoj(初中)2109-清兵线【dp】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。