HDU 2660 Accepted Necklace DFS || 多重背包
这题是以多重背包题..... 不过还不会多重... 只会简单的... 这里用DFS做就行了..... 不过这里如果不把当前位置传下去就会超时的噢... 我开始一直TLE 后来把当前状态传下去就A了
15MS
#include<stdio.h> int V[25],W[25]; int des[25],n,k,we,max,dp[25][25]; int inf = 0x7fffffff; void DFS( int p,int num,int val,int wei )//p不可少,否则超时.... 悲剧额.... {//以后做这种深搜的一定先考虑要不要传递当前状态.. 以此来减少深搜时间 if( num == k || wei == we ) if( val > max ) max = val; for( int i = p; i <= n; ++i ) { if( !des[i] ) if( ( num + 1 <= k ) && ( wei + W[i] <= we ) ) { des[i] = 1; DFS( i + 1,num + 1,val + V[i],wei + W[i] ); des[i] = 0; } } } int main( ) { int t; scanf( "%d",&t ); while( t-- ) { max = 0; scanf( "%d%d",&n,&k ); for( int i = 1; i <= n; ++i ) des[i] = 0,scanf( "%d%d",&V[i],&W[i] ); scanf( "%d",&we ); DFS( 0,0,0,0 ); printf( "%d\n",max ); } return 0; } /* 5 1 8 3 1 1 */
本人还是新手 ,转载请注明来自Lvsi‘s home