#include #include #include using namespace std; const long long INF = 999999999999999; long long a[100001], b[100001]; long long kk[1001], p[1001]; long long dp[1001][11]; int vis[1001][11]; int n, m; long long dfs(int x, int y) { if(x <= 0){ return 0; } if(vis[x][y]){ return dp[x][y]; } vis[x][y] = 1; int i; dp[x][y] = INF; for(i=0; i y) { long long cur = dfs(x - (p[i]-y), y); if(dp[x][y] > cur + kk[i]) { dp[x][y] = cur + kk[i]; } //cout << x << " " << y << " " << dp[x][y] << " " << i << " "; } } return dp[x][y]; } int main() { int i, j; while(cin >> n >> m) { memset(vis, 0, sizeof(vis)); memset(dp, 0, sizeof(dp)); for(i=0; i> a[i] >> b[i]; scanf("%lld%lld", &a[i], &b[i]); } for(i=0; i> kk[i] >> p[i]; scanf("%lld%lld", &kk[i], &p[i]); } long long cur = INF; //dfs(1000, 5); for(i=0; i<=10; i++) { //dfs(1000, i); for(j=1000; j>=0; j--) { /* if(!vis[j][i]) { dp[j][i] = cur; } else{ cur = dp[j][i]; }*/ dfs(j, i); } } long long ans = 0; for(i=0; i