刷題記錄24
【對比演算法】
連結:https://ac.nowcoder.com/acm/contest/950/E
來源:牛客網
刷題記錄15
小偉報名參加中央電視臺的智力大沖浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的?!接下來主持人宣佈了比賽規則:
首先,比賽時間分為n個時段,它又給出了很多小遊戲,每個小遊戲都必須在規定期限ti前完成。如果一個遊戲沒能在規定期限前完成,則要從獎勵費m元中扣去一部分錢w_iw
i,w_iw i 為自然數,不同的遊戲扣去的錢是不一樣的。當然,每個遊戲本身都很簡單,保證每個參賽者都能在一個時段內完成,而且都必須從整時段開始。主持人只是想考考每個參賽者如何安排組織自己做遊戲的順序。作為參賽者,小偉很想贏得冠軍,當然更想贏取最多的錢!注意:比賽絕對不會讓參賽者賠錢!
【程式碼】
sort(a+1,a+n+1,cmp); //從a+1開始,到a+n+1結束,呼叫cmp程式
int ans=0,t=0;
for(int i=1;i<=n;i++){ //將能完成的結束迴圈,剩下的為不能完成的
int tag=0;
for(int j=a[i].t;j;j--){
if(vis[j]==0){
vis[j]=1;
tag=1;
break;
}
}
if(tag==0){
for(int j=n;j;j--){
if(vis[j]==0){
vis[j]=1;
break;
}
}
ans+=a[i].val; //將不能完成的權值相加
}
}
cout<<m-ans; //注意:輸出為m-ans
return 0;
}
刷題記錄23
老師在開學第一天就把所有作業都佈置了,每個作業如果在規定的時間內交上來的話才有學分。每個作業的截止日期和學分可能是不同的。例如如果一個作業學分為 10,要求在 6 天內交,那麼要想拿到這 10 學分,就必須在第 6 天結束前交。每個作業的完成時間都是隻有一天。例如,假設有 7 次作業的學分和完成時間如下:最多可以獲得15學分,其中一個完成作業的次序為2,6,3,1,7,5,4,注意可能還有其他方法。
你的任務就是找到一個完成作業的順序獲得最大學分
【程式碼】
sort(a,a+n,cmp); //根據cmp進行排序
int time=0;
int num=0;
for(int i=0;i<n;i++){
bool flag=false; //運用布林變數進行判斷相應的陣列是否輸出
if(a[i].t<time)continue; //如果時間小於0,則跳出迴圈
for(int j=a[i].t;j>=1;j--){
if(v[j]==0){
v[j]=1;
num+=a[i].m; //學分相加
flag=true; //布林變數為真
break;
}
}
if(!flag){ //布林變數為假,將學分的值存進time中
time=a[i].t;
}
}
cout<<num; //輸出學分
return 0;
}
【感悟】
對比以上兩個演算法,第一個要求輸出不符合條件的陣列值,第二個要求輸出符合條件的值,他們都是同一個演算法。要求符合條件的輸出,運用bool變數進行篩選,最後只需把他們的值相加;而要求輸出不符合條件的則需將所有符合條件的值都跳出迴圈,也可以試用bool變數來解決。
相關文章
- 刷題記錄
- 記錄刷題日常
- Codeforces 刷題記錄
- CTF刷題記錄
- BUU刷題記錄
- 刷題記錄11
- 刷題記錄27
- LeetCode刷題記錄LeetCode
- leetcode刷題記錄 661~LeetCode
- [雜項] 刷題記錄
- 軟考刷題記錄3
- 軟考刷題記錄5
- 劍指offer刷題記錄
- 面試刷題偶有記錄面試
- 2024年8月刷題記錄
- 2024年10月刷題記錄
- 2024年9月刷題記錄
- 2024年11月刷題記錄
- 2024年1月刷題記錄
- 2024年4月刷題記錄
- 2024年3月刷題記錄
- 2024年2月刷題記錄
- 2024年7月刷題記錄
- 2024年6月刷題記錄
- 2024年5月刷題記錄
- LeetCode刷題記錄——day1LeetCode
- ctfshow刷題記錄-cry方向-1
- ctfshow刷題記錄-社工篇-1
- LeetCode刷題記錄——day5LeetCode
- LeetCode刷題記錄——day4LeetCode
- LeetCode刷題記錄——day3LeetCode
- LeetCode刷題記錄——day2LeetCode
- 刷題記錄(C語言)01C語言
- 每日刷題記錄 11-18
- LeetCode-劍指Offer刷題記錄LeetCode
- leetcode每日一題刷題記錄(10.26-10.30)LeetCode每日一題
- LeetCode刷題記錄與題解(C++版本)LeetCodeC++
- leetcode刷題記錄1041-1050 python版LeetCodePython