HDU 1203 I NEED A OFFER! 简单DP
这题是Bone collector 是以姊妹题,同样的背包 http://www.cnblogs.com/Lvsi/archive/2011/04/27/2030158.html
不过比较大小的条件要换一下,至少有一个被选上的概率为1-( 1-dp[j-w[i]] ) * ( 1 - v[i] ),这个地方用到了高中的概率,很简单的仔细想想就过了.不多说了,来看代码把
#include<stdio.h>
#include<string.h>
int n,m,w[10005];
double v[10005],dp[10005];
void DP( )
{
memset( dp,0,sizeof( dp ) );
for( int i = 1; i <= m; ++i )
for( int j = n; j >= w[i]; --j )
if( 1-( 1-dp[j-w[i]] ) * ( 1 - v[i] ) > dp[j] )
dp[j] = 1 - ( 1-dp[j-w[i]] ) * ( 1 - v[i] );//不同处
}
int main( )
{
while( scanf( "%d%d",&n,&m ),m|n )
{
for( int i = 1; i <= m; ++i )
scanf( "%d%lf",&w[i],&v[i] );
DP( );
printf( "%.1lf%%\n",dp[n]*100 );
}
return 0;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号