10 21T8 rand 隨機化 揹包

2022-05-01 18:30:08 字數 2600 閱讀 3618

n(1 <= n <= 20)個乾草堆,每堆的體積大小為si(1 <= si <= 100),需要分裝到三個穀倉裡。要求這三穀倉分得盡量平均(每堆草不可分割),即最大的一堆最小。請求出這最大的乙個穀倉分得的體積。

第一行: 整數 n.

第 2..1+n行:每行乙個整數表示第第i堆的體積si.

第1行:最大穀倉分得的乾草堆體積和814

25158

920426

此題使用堆然後直接看人品隨機化就可以了

23333333

使用我的生日20020731做種子就ac了哈哈哈哈哈哈

code:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 priority_queue,greater >q;

8int a[30];9

intmain()

17int min0=0x3f3f3f3f;18

for(int o=1; o<=1200000; o++) ,max0=0;20

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

25 max0=max(b[0],max(b[1],b[2

]));

26 min0=min(min0,max0);

27for(int i=1; i<=n; i++) 30}

31 cout<

32return0;

33 }

當然我們除此之外還有揹包演算法

令f[i][j]表示第乙個穀倉體積為i,第二個為j是否存在,於是我們就可以直接暴力跑揹包

當然因為轉移的時候好像為了避免滾動陣列的思考難度就用了兩個陣列復用

code:

1 #include 2

using

namespace

std;

3const

int maxs = 700;4

5int

n, bale, tsum;

6bool good[2][maxs+100][maxs+100];7

8int

main()931

}32}33

34int ans =maxs;

35for (int i = 0; i < maxs; i++)

36for (int j = 0; j < maxs; j++)

37if (good[n%2

][i][j])

38 ans = min (ans, max (i, max (j, tsum - (i +j))));

39 fout << ans <

;40return0;

41 }

爆搜也是可以的

code:

1 #include2 #include3

using

namespace

std;

4int a[25],n,ans=0x7fffffff;5

void dfs(int k,int x,int y,intz)7

//可行性減枝

8if(ans-a[k]>x)dfs(k+1,x+a[k],y,z);

9if(ans-a[k]>y&&x!=y)dfs(k+1,x,y+a[k],z);

10if(ans-a[k]>z&&x!=z&&y!=z)dfs(k+1,x,y,z+a[k]);11}

12int

main()

神仙做法:排完序之後可以交換

code:

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8intn;9

int s[200]=;

10int minv[3

];11

int ob[3][200]=;

12int cnt[3]=;

13bool cmp(int a,int b)

14int get_maxpos()return

maxpos;}

15int get_minpos()

16void tiaozheng(int a,int b)26}

27}28if(!mark)return;//

如果之前有交換,繼續交換最大和最小

29int maxpos=get_maxpos(),minpos=get_minpos();

30if(minpos!=maxpos)tiaozheng(minpos,maxpos);31}

32int

main()

53int ans=0

;54 ans=max(minv[0],minv[1

]);55 ans=max(ans,minv[2

]);56 cout<

57return0;

58 }

over 哈哈哈哈哈哈哈哈哈哈哈哈嗝

10 21T3 樹上倍增

小b正在樹上漫步,突然接到了小s的 要他去點y買一些禮物,然而他現在正處於x點,然而他身上並沒有錢 其實錢無限多 這個時候,小b遇到了小l,小l告訴了他乙個絕妙的方法,因為樹上的每個點都有dalao的存在,而這些dalao當中總有購買或 和購買 相同 bsoj許可權賬號的人,而且因為各點dalao數...

1021上午考試T2

題目大意 n個莊家。你可以到莊家那邊下注,每次可以猜大猜小,猜一次一元錢。每一次開彩前,你都可以到任意個莊家那裡下賭注。如果開彩結果是大,你就可以得到你之前猜大的莊家相應的ai元錢。如果開彩結果是小,你就可以得到你之前猜小的莊家相應的bi元錢。你可以在同乙個莊家那裡既猜大又猜小 這樣是兩塊錢 也可以...

10 21T4 字典樹 高精度

平平帶著韻韻來到了遊樂園,看到了n輛漂亮的遙控車,每輛車上都有乙個唯一的名字name i 韻韻早就迫不及待地想玩名字是s的遙控車。可是韻韻畢竟還小,她想象的名字可能是一輛車名字的字首 也就是說能確定乙個i,使s是name i 的字首 這時她就能玩第i輛車 或者是乙個無中生有的名字,即s不是任何一輛車...