uva 12563
jin ge jin qu hao
這題的背景我也是服了。。。
這是乙個揹包問題,可以簡述為有n
首歌,每首歌只能唱1
次,要求在所剩不多的t
秒內,唱盡可能多的歌,同時唱得盡可能的長。這樣即使最後只剩1
秒,點一首超長的就能多唱好久。??
按照給定歌曲的順序,依次決定要不要唱這首歌就好了。如果不唱,總數目不變,總時間也不變;如果唱,會用掉一定的時間,對後面的選擇有影響,所以應該把時間也考慮進來,因此用sung[s][t]
表示已經對第s
首歌進行了選擇,同時用掉的時間為t
時能唱的最大數目,遞推公式為sung[s][t] = max(sung[s - 1][t], sung[s - 1][t - len[s]] + 1)
,前一項表示不唱,後一項表示唱。
因為這道題還要求出實際唱歌時間,並且在唱得一樣多的情況下唱得盡可能得長,即在決定唱,雖然不能多唱但是可以延長時間的情況下更新實際唱歌時間。
#include
#include
using
namespace std;
void
findmaximumsung
(const vector<
int>
&vilength,
const
int time)
for(size_t s =
1; s < song; s++
)else
if(sung[s]
[t].first == sung[s -1]
[t - vilength[s]
].first +1)
}}}}
int maxtime =
0, maxsung =0;
for(size_t t = time; t >
0; t--
)else
if(sung[song -1]
[t -1]
.first == maxsung)}}
cout << maxsung +
1<<
' '<< maxtime +
678<< endl;
}int
main()
cout <<
"case "
<< test +
1<<
": "
;findmaximumsung
(vilength, t);}
return0;
}/*23 100
60 70 80
3 100
30 69 70
*/
演算法競賽入門經典例題
7744問題 問題 輸出所有形如aabb的四位完全平方數 即前兩位數字相等,後兩位數字也相等 include include int main 開燈問題 include include define maxn 1010 int a maxn int main int n,k,first 1 mems...
演算法競賽入門經典 例題4 1
uva1339 ancient cipher 題目意思為判斷明文是否可以經過位置變換以及字母替換得到密文。因為不需要輸出替換方案,只判斷存在性,那就先不考慮搜尋。位置變換不用考慮,因為只要長度一樣,就肯定能逆回去,關鍵是字母替代。可以把明文和密文先進行排序,然後看模式是否相同,比如題目中第一組測試資...
演算法競賽入門經典 例題4 5
uva512 spreadsheet tracking 給定乙個 和一些操作序列,輸出給定單元格在這些操作後的位置。如果在整個 上模擬操作,那麼就需要記錄原始 和最終 中每乙個單元格的對應關係,比如可以通過給單元格內容編號,新加入的單元格編號全0,刪除原始單元格則編號全部改 1,最後在整個 中搜尋原...