//=============================================================================== // //> Author : flowertree //> About : poj 1276 //> Time : 2015.12.28 //> Algorithm : 多重背包 楼天成男人八题poj 1742简化版 // : 完全背包转换为 01背包 多重背包转换为 完全背包 // //=============================================================================== #include <iostream> #include <string.h> #include <stdio.h> using namespace std; #define MAX 110000 #define M 2005 int num[MAX], w[MAX]; int dp[MAX]; int tempnum[MAX]; int main() { int cash; int n; while(scanf("%d%d", &cash, &n) != EOF) { memset(dp, 0, sizeof(dp)); for(int i = 1; i <= n; i++) { scanf("%d%d", &num[i], &w[i]); } for(int i = 1; i <= n; i++) { memset(tempnum, 0, sizeof(tempnum)); for(int v = w[i]; v <= cash; v++) { if(dp[v - w[i]] + w[i] > dp[v] && tempnum[v - w[i]] < num[i]) { dp[v] = dp[v - w[i]] + w[i]; tempnum[v] = tempnum[v - w[i]] + 1; } } } cout << dp[cash] << endl; } system("pause"); return 0; }