涓寮濮嬫妸棰樻剰鐞嗚В閿欎簡錛屼互涓哄埢鍦ㄥ悓涓寮犲厜鐩樹笂鐨勬瓕鏇茬殑鏃墮棿欏哄簭涓嶅彉灝卞彲浠ヤ簡銆?br />浜嬪疄涓婁笉浠呭悓鍏夌洏涓婄殑姝屾洸鍐欏叆鏃墮棿瑕佹寜欏哄簭錛屽墠涓寮犲厜鐩樹笂鐨勬瓕鏇蹭笉鑳芥瘮鍚庝竴寮犳瓕鏇插啓鍏ユ椂闂磋鏅氥?br />
鏁版嵁閲忔瘮杈冨皯錛岀敤鍥炴函娉曪紝dp涔熻銆?br />
#include聽<iostream>
#include聽<fstream>
using聽namespace聽std;
ifstream聽fin("rockers.in");
ofstream聽fout("rockers.out");
#ifdef聽_DEBUG
#define聽out聽cout
#define聽in聽cin
#else
#define聽out聽fout
#define聽in聽fin
#endif
int聽capacity[20];;
int聽songs[20];
int聽song_num,disk_num;
int聽res聽=聽0;
int聽cur;
void聽backtracing(int聽depth,int聽last)
{
聽聽聽聽if(depth==song_num){
聽聽聽聽聽聽聽聽if(cur>res){
聽聽聽聽聽聽聽聽聽聽聽聽res聽=聽cur;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽return;
聽聽聽聽}
聽聽聽
聽聽聽 //濡傛灉鍚庨潰鎵鏈夌殑姝屾洸閮藉姞涓婅繕姣旀渶浼樺煎皬錛屽壀鏋?br />聽聽聽聽if(cur+song_num-depth<=res)
聽聽聽聽聽聽聽return;聽
聽聽聽聽for(int聽i=last;i<disk_num;++i){
聽聽聽聽聽聽聽聽 //濡傛灉褰撳墠姝屾洸闇瑕佸埢褰曪紝閭e彧闇鍒誨湪絎竴寮犺兘瑁呭緱涓嬬殑鍏夌洏涓娿?br />聽聽聽聽聽聽聽聽if(聽capacity[i]>=songs[depth]){
聽聽聽聽聽聽聽聽聽聽聽聽cur++;
聽聽聽聽聽聽聽聽聽聽聽聽capacity[i]-=songs[depth];
聽聽聽聽聽聽聽聽聽聽聽聽backtracing(depth+1,i);
聽聽聽聽聽聽聽聽聽聽聽聽capacity[i]+=songs[depth];
聽聽聽聽聽聽聽聽聽聽聽聽cur--;
聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽 // 涓嶅埢褰撳墠姝屾洸
聽聽聽聽backtracing(depth+1,last);
}
void聽solve()
{
聽聽聽聽int聽c;
聽聽聽聽in>>song_num>>c>>disk_num;
聽聽聽聽for(int聽i=0;i<song_num;++i)
聽聽聽聽聽聽聽聽in>>songs[i];
聽聽聽聽for(int聽i=0;i<disk_num;++i)
聽聽聽聽聽聽聽聽capacity[i]聽=聽c;
聽聽聽聽backtracing(0,0);
聽聽聽聽out<<res<<endl;
}
int聽main(int聽argc,char聽*argv[])
{
聽聽聽聽solve();聽
聽聽聽聽return聽0;
}

]]>