LeeBlog

导航

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;
}

posted on 2011-04-27 16:00  LeeBlog  阅读(194)  评论(0编辑  收藏  举报