努力ing
你浪费的今天是昨天死去的人所渴望的明天!!!

简单dp

http://acm.hdu.edu.cn/showproblem.php?pid=1864

#include<iostream>
#include<string>
using namespace std;
double
dp[50];
double
max(double a,double b)
{

    return
a>b?a:b;
}

int
main()
{

    int
m,n,j,i;
    double
val,A,B,C;
    char
c;
    double
v;
    double
sum[30];
    int
flag;
    while
(cin>>val>>n&&n)
    {

        memset(sum,0,sizeof(sum));
        memset(dp,0,sizeof(dp));

        for
(i=0;i<n;i++)
        {

            A=B=C=0;
            cin>>m;
            flag=1;
            for
(j=0;j<m;j++)
            {

                getchar();
              
                scanf("%c:%lf",&c,&v);
                if
(c=='A') A+=v;
                else if
(c=='B') B+=v;
                else if
(c=='C') C+=v;
                else
flag=0;
               
                sum[i]+=v;
            }

           
                if
(sum[i]>1000||flag==0||A>600||B>600||C>600)
                    sum[i]=0;
            //    cout<<sum[i]<<' ';
        }
        for
(i=1;i<=n;i++)
        {

            for
(j=n;j>=0;j--){
                if
(dp[j-1]+sum[i-1]<=val)
                    dp[j]=max(dp[j],dp[j-1]+sum[i-1]);
                //    cout<<dp[j]<<' ';
            }
        }

   
        double
max=dp[0];
        for
(i=n;i>=0;i--)
        if
(dp[i]>max){
            max=dp[i];
        }

        printf("%.2f\n",max);
       
    }

    return
0;
}

posted on 2013-05-25 14:29  努力ing  阅读(128)  评论(0)    收藏  举报