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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Simple Operations on Sequence

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Simple Operations on Sequence 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

F - Simple Operations on Sequence?Editorial

?/?


Time Limit: 2 sec / Memory Limit: 1024 MB

Score :?500500?points

Problem Statement

Given are two sequences of?NN?integers each:?A = (A_1, A_2, \ldots, A_N)A=(A1?,A2?,…,AN?)?and?B = (B_1, B_2 \ldots, B_N)B=(B1?,B2?…,BN?).

On the sequence?AA, you can do the two operations below any number of times (possibly zero) in any order.

  • Choose an integer?ii?satisfying?1 \leq i \leq N1≤i≤N, and increase or decrease?A_iAi??by?11, for the cost of?XX?yen (Japanese currency).
  • Choose an integer?ii?satisfying?1 \leq i \leq N-11≤i≤N?1, and swap the values of?A_iAi??and?A_{i+1}Ai+1?, for the cost of?YY?yen.

Print the minimum total cost needed to make the sequence?AA?equal the sequence?BB?by repeating the above.

Constraints

  • 2 \leq N \leq 182≤N≤18
  • 1 \leq X \leq 10^81≤X≤108
  • 1 \leq Y \leq 10^{16}1≤Y≤1016
  • 1 \leq A_i, B_i \leq 10^81≤Ai?,Bi?≤108
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

NN XX YY A_1A1? A_2A2? \ldots… A_NAN? B_1B1? B_2B2? \ldots… B_NBN?

Output

Print the minimum total cost needed to make?AA?equal?BB.


Sample Input 1?Copy

Copy

4 3 5 4 2 5 2 6 4 2 1

Sample Output 1?Copy

Copy

16

Initialy, we have?A = (4, 2, 5, 2)A=(4,2,5,2).
The following sequence of operations makes?AA?equal?BB.

  • Pay?X = 3X=3?yen to increase the value of?A_3A3??by?11, making?A = (4, 2, 6, 2)A=(4,2,6,2).
  • Pay?Y = 5Y=5?yen to swap the values of?A_2A2??and?A_3A3?, making?A = (4, 6, 2, 2)A=(4,6,2,2).
  • Pay?Y = 5Y=5?yen to swap the values of?A_1A1??and?A_2A2?, making?A = (6, 4, 2, 2)A=(6,4,2,2).
  • Pay?X = 3X=3?yen to decrease the value of?A_4A4??by?11, making?A = (6, 4, 2, 1)A=(6,4,2,1).

The total cost of these operations is?3+5+5+3 = 163+5+5+3=16?yen, which is the minimum possible.


Sample Input 2?Copy

Copy

5 12345 6789 1 2 3 4 5 1 2 3 4 5

Sample Output 2?Copy

Copy

0

AA?and?BB?are equal from the beginning, so no operation is needed.


Sample Input 3?Copy

Copy

18 20719114 5117250357733867 10511029 36397527 63027379 44706927 47672230 79861204 57882493 42931589 51053644 52300688 43971370 26515475 62139996 41282303 34022578 12523039 6696497 64922712 14720753 4621362 25269832 91410838 86751784 32741849 6602693 60719353 28911226 88280613 18745325 80675202 34289776 37849132 99280042 73760634 43897718 40659077

Sample Output 3?Copy

Copy

13104119429316474

Note that values in input or output may not fit into?3232-bit integer types.

=========================================================================

20以內就考慮狀壓或者搜索,搜索毫無頭緒可言,故考慮狀壓。狀壓在本題很有技巧性

設 i狀態為當前歸位元素狀態,1為歸位。

1011 代表將 a4 a2 a1放在 b3 b2 b1時的狀態。至于先放哪一個在b1 ,我們通過二進制枚舉都能夠枚舉到,我們只需要將目前要放的放在下一個b就能夠滿足。

以1有0個的情況為例,也就是我們要從0擴展一個的情況,枚舉全部n個,得到了答案,但消耗的y我們并沒有算進去。

n=4為例

?最開始我們把a2置換到b1位置為例, 我們此時y=0,僅計算了消耗x的代價

置換我們又要把 一個數置換到b2位置,

如果是a1,我們發現它前面有個2,所以y=1? 。然后一次類推,結果竟然與最終置換次數一模一樣。那是因為1次置換改變了一次逆序數,兩次不相同的置換,又會改變一次逆序數,

?1? 2? ?3? 4? 5 為例

置換 2 3??

?1? ?3? 2? ?4 5 逆序數加1

置換 1 3

?3 1 2 4 5 逆序數加1?

置換 4 2

3 1 4 2 5 逆序數又加1

#include <bits/stdc++.h> using namespace std;typedef long long int ll;const int N=(1<<18)+10;ll dp[N];ll a[20],b[20]; int get(int x){int ans=0;for(int i=0;(1<<i)<=x;i++){if(((1<<i)&x))ans++;}return ans;} int main() {int n;cin>>n;ll x,y;cin>>x>>y;for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<n;i++){cin>>b[i];}dp[0]=0;for(int i=1;i<(1<<n);i++){dp[i]=1e18;}for(int i=0;i<(1<<n);i++){int cnt=get(i);int temp=0;for(int j=n-1;j>=0;j--){if((i&(1<<j))==0){dp[i|(1<<j)]=min(dp[i|(1<<j)],dp[i]+x*abs(a[j]-b[cnt])+y*(temp));}elsetemp++;}}cout<<dp[(1<<n)-1];}

總結

以上是生活随笔為你收集整理的Simple Operations on Sequence的全部內容,希望文章能夠幫你解決所遇到的問題。

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