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
浙公网安备 33010602011771号