程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu1864背包求找錯

hdu1864背包求找錯

編輯:C++入門知識

//我已經不能理解為什麼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;  
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved