#include<cstdio>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int dp[15][1005];
void sovel(int k, int p)
{
for (int b = 1; b < 11; b++)
{
if (b >= p)
continue;
else
{
int ss = p - b;
for (int i = 1; i < 1001; i++)
{
if (i <= ss)
dp[b][i] = min(dp[b][i], k);
else
dp[b][i] = min(dp[b][i], dp[b][i - ss] + k);
}
}
}
}
struct M
{
int a;
int b;
}Mm[100002];
int main()
{
int n, m,i,j,max_b;
int k[1005], p[1005];
long long ans ;
while (scanf("%d%d",&n,&m)!=EOF)
{
max_b = -1;
for (i = 0; i < n; i++)
{
scanf("%d%d", &Mm[i].a, &Mm[i].b);
max_b = max(Mm[i].b, max_b);
}
bool flag = true;
for (i = 0; i < m; i++)
{
scanf("%d%d", &k[i], &p[i]);
if (p[i] > max_b)
flag = false;
}
if (flag)
{
printf("-1\n");
continue;
}
for(i=0;i<15;i++)
for (j = 0; j < 1005; j++)
{
if (i == 0)
dp[i][j] = 0;
else
dp[i][j] = INF;
}
for (i = 0; i < m; i++)
sovel(k[i], p[i]);
ans = 0;
for (i = 0; i < n; i++)
ans += dp[Mm[i].b][Mm[i].a];
printf("%I64d\n", ans);
}
}
暂存
最新推荐文章于 2025-05-23 17:23:19 发布