暂存

xiaoxiao2021-02-28  101

#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); } }
转载请注明原文地址: https://www.6miu.com/read-50645.html

最新回复(0)