简单的01背包 HDU

来源:互联网 发布:淘宝精装修教程pdf 编辑:程序博客网 时间:2024/06/05 05:49

Bone Collector HDU - 2602
做法:二维数组
出的错误:1、输入两个数组搞混了。。。2、存在这样的样例:有体积为零,但仍有价值的

#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;int n,vv;int w[1005],v[1005];int b[1005][1005];//有体积为零,但仍有价值的int main(){    int t;    scanf("%d",&t);    while(t--){        scanf("%d%d",&n,&vv);        for(int i=1;i<=n;i++)            scanf("%d",&v[i]);//价值        for(int i=1;i<=n;i++)            scanf("%d",&w[i]);//体积        for(int j=0;j<=vv;j++)           if(w[n]<=j)  b[n][j]=v[n];           else b[n][j]=0;        //for(int i=0;i<n;i++)    b[i][0]=0;        for(int i=n-1;i>=1;i--)            for(int j=0;j<=vv;j++)                if(w[i]==0||(j!=0&&w[i]<=j)) b[i][j]=max(b[i+1][j],b[i+1][j-w[i]]+v[i]);                else b[i][j]=b[i+1][j];        printf("%d\n",b[1][vv]);    }    return 0;}

最大报销额 HDU - 1864
做法:滚动一维数组。金额*100转换为整数
出现的错误:i

#include <iostream>#include <stdio.h>#include <vector>#include <string.h>#include <algorithm>using namespace std;double q;int n,a[35],dp[3000010];int main() {    int ff=1;    while(scanf("%lf%d",&q,&n)&&n){        int k=1;            for(int i=0;i<n;i++){            int t,flag=0;            scanf("%d",&t);            char ch;double sum=0,temp,b[5];            memset(b,0,sizeof(b));            for(int j=0;j<t;j++){                scanf(" %c:%lf",&ch,&temp);                if(flag) continue;                if(ch!='A'&&ch!='B'&&ch!='C')   flag=1;                else{                    sum+=temp;                    b[ch-'A']+=temp;                    if(b[ch-'A']>600)   flag=1;                }            }            if(flag==0&&sum<=1000.00)    a[k++]=sum*100;        }        memset(dp,0,sizeof(dp));        int total=q*100;        for(int i=1;i<k;i++)    ///i<k 脑子瓦特了!!!!            for(int j=total;j>=a[i];j--)                dp[j]=max(dp[j],dp[j-a[i]]+a[i]);        printf("%.2f\n",dp[total]*0.01);    }    return 0;}/*不能用贪心1001.5 41 A:5001 C:4001 A:3001 B:200dp。输入数据全部都是2位小数,可以直接化为整数处理100.00 51 A:51 B:201 C:241 A:301 A:60*/
原创粉丝点击