POJ1276:Cash Machine(多重背包)

来源:互联网 发布:怎么运营淘宝店铺 编辑:程序博客网 时间:2024/05/29 17:53
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>using namespace std;int dp[100010];/*多重背包问题就是,多了一层循环,和01背包差不多*/struct node{    int n,v;} a[20];int main(){    int sum,n,i,j,k;    while(~scanf("%d%d",&sum,&n))    {        for(i = 1; i<=n; i++)            scanf("%d%d",&a[i].n,&a[i].v);        if(!sum)        {            printf("0\n");            continue;        }        if(!n)        {            printf("0\n");            continue;        }        memset(dp,0,sizeof(dp));        dp[0]=1;        int MAX=0,tem;        for(i=1;i<=n;i++)        {            for(j=MAX;j>=0;j--)            {                if(dp[j])                {                    for(k=1;k<=a[i].n;k++)                    {                        tem=j+k*a[i].v;                        if(tem>sum)                            continue;                        dp[tem]=1;                        if(tem>MAX)                            MAX=tem;                    }                }            }        }        printf("%d\n",MAX);        }        return 0;}

0 0