poj 1276 Cash Machine

多重揹包的其他應用

#include<iostream>
#include<string.h>
#include<math.h>
#include<fstream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<vector> 
#define MAXSIZE 100
using namespace std;

int cash = 0, N = 0, n[11], d[11]; 
int dp[100001];
int rec[100001]; 
int ans = 0;
int main()
{
    //freopen("data_1276.txt","r",stdin);
    while(scanf("%d%d", &cash, &N) != EOF)
    {
        for (int i = 1; i <= N; i++)
        {
            scanf("%d%d", &n[i], &d[i]);
        }
        memset(dp, 0, sizeof(dp));
        dp[0] = 1; 
        for (int i = 1; i <= N; i++)
        {
            memset(rec, 0, sizeof(rec));
            for (int j = d[i]; j <= cash; j++)
            {
                if (!dp[j] && dp[j - d[i]] && rec[j - d[i]] < n[i])
                {
                    dp[j] = 1;
                    rec[j] = rec[j - d[i]] + 1;  
                }
            } 
        }
        while(!dp[cash] && cash > 0)
        {
            cash--;
        }
        printf("%d\n", cash);
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章