多重背包

来源:互联网 发布:高分少女 知乎: 编辑:程序博客网 时间:2024/06/04 20:38
#include<iostream>#include<stdio.h>#include<cmath>#include<algorithm>#include<string>#include<cstring>#include<string.h>#include<map>#include<queue>#include<stack>#include<list>#include<cctype>#include<fstream>#include<sstream>#include<iomanip>#include<set>#include<vector>#include<cstdlib>#include<time.h>using namespace std;#define mem(x) memset(x,0,sizeof(x))#define scanfd(x) scanf("%d",&x)struct node{    int pice;    int cnt;}d[105];int dp[100005];int main(){    int i, j, k;    int zong, n;    int t;    while (cin >> zong >> n)    {        mem(dp);        for (int i = 1; i <= n; i++)        {            cin >> d[i].cnt >> d[i].pice;        }        int max = 0,tem;        dp[0] = 1;        for (int i = 1; i <= n; i++)        {            for (int k = max; k >= 0; k--)            {                if (dp[k])                for (int j = 1; j <= d[i].cnt; j++)                {                    tem = k + j*d[i].pice;                    if (tem > zong)                        continue;                    dp[tem] = 1;                    if (tem > max)                        max = tem;                }            }        }        cout << max << endl;    }    return 0;}
0 0
原创粉丝点击