现在的位置: 首页 > 综合 > 正文

hdu1864背包求找错

2013年08月03日 ⁄ 综合 ⁄ 共 882字 ⁄ 字号 评论关闭
//我已经不能理解为什么WA了
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

#define MAXN 5000000

int Q;
int N;
int prices[35];
int m;
int n;
char type;
double price;
int F[MAXN];

int main()
{
    double q;
    while(cin>>q)
    {
        memset(F,0,sizeof(F));
        cin>>N;
        if(N == 0)
            break;
        Q = (int)(q*100);
        n = 0;
        for(int i = 1; i <= N; i++)
        {
            cin>>m;
            int sum = 0;
            int ma,mb,mc;
            ma = mb = mc = 0;
            char bd;
            bool flag = true;
            for(int j = 1; j <= m; j++)
            {
                cin>>type>>bd>>price;
                if(type!='A' && type!='B' && type!='C')
                {
                    flag = false;
                    break;
                }
                if(type == 'A')
                {
                    if(ma + price*100 <= 60000)
                        ma += price*100;
                    else
                    {
                        flag = false;
                        break;
                    }
                }
                if(type == 'B')
                {
                    if(mb + price*100 <= 60000)
                        mb += price*100;
                    else
                    {
                        flag = false;
                        break;
                    }
                }
                if(type == 'C')
                {
                    if(mc + price*100 <= 60000)
                        mc += price*100;
                    else
                    {
                        flag = false;
                        break;
                    }
                }
            }
            sum = ma + mb + mc;
            if(sum <= 100000 && flag == true)
            {
                n++;
                prices[n] = sum;
            } 
        }
        for(int i = 1; i <= n; i++)
        {
            for(int j = Q; j >= prices[i]; j--)
            {
                F[j] = max(F[j],F[j-prices[i]]+prices[i]);
            }
        }
        double ans =(double)(F[Q])/100.00;
        printf("%.2lf\n",ans);
    }
    return 0;
}

抱歉!评论已关闭.