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