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

]]>