牛客練習賽5

2021-08-19 23:22:12 字數 1454 閱讀 3912

給你n個正整數,n<=5,每個正整數大小不超過1000,最初su

m=0 sum

=0

,每次可將su

m sum

按順序加上陣列中的數,加完之後可以對sum的數字進行全排列,求最終能達到的最大值。

由於n只有5,所以按照題意模擬dfs實現就可以了,注意最後一組也可以按數字進行全排列。

d題**

#include

#include

#include

#include

using namespace std;

const int maxn = 10;

int n;

int a[maxn];

int b[5];

int ans;

void dfs(int

x,int sum)

sort(b,b+pos);

doans=max(ans,cnt);;

}while (next_permutation(b,b+pos));

return ;

}int b[5];

memset(b,0,sizeof(b));

int xx=sum;

intpos=0;

while(xx)

sort(b,b+pos);

dodfs(x+1,cnt+a[x]);

}while (next_permutation(b,b+pos));

}int main()

給你一些長度不等寬度相等的木板,橫向左對齊依次排好,每次只能沿一條連續的直線進行粉刷,求最少多少次就能全部粉刷。

這算是我的第一分治題,由於之前沒有接觸過卡了很久,後來研究了一下,這個還是具有區域性最優解的,如果當前所有木板中最短長度為t,共n個木板,若選擇橫向塗,則結果一定為n,若選擇縱向塗,則將所有木板與最短木板相應的部分塗色,再對最短木板的左右分別進行下一輪的塗色問題。

e題**

#include

#include

#include

using

namespace

std;

const

int maxn = 3005;

const

int inf = 0x3f3f3f3f;

int n;

int a[maxn];

int dfs(int l,int r,int h)

int tmp=a[flag]-h;

if(tmp<0) tmp=0;

return min(sum,dfs(l,flag-1,max(a[flag],h))+dfs(flag+1,r,max(a[flag],h))+tmp);

}int main()

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...

牛客練習賽15

時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一次期中考終於結束啦!沃老師是個語文老師,他在評學生的作文成績時,給每位學生的分數都是乙個小於10的非負小數。amy 8.99999999999999999999...

牛客練習賽24

a石子列陣 快速冪取模 第乙個位置可以有m種選擇,其他每個位置m 1種 include include include includeusing namespace std const int mod 1e9 7 long long quick power long long a,long long...