首页 > 代码库 > 百度之星2017资格赛1003 度度熊与邪恶大魔王
百度之星2017资格赛1003 度度熊与邪恶大魔王
思路:
真是菜的不行。
实现:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int INF = 0x3f3f3f3f; 7 int dp[11][1001], A[100005], B[100005], K[1005], P[1005], n, m; 8 9 int main() 10 { 11 while (scanf("%d %d", &n, &m) != EOF) 12 { 13 for (int i = 0; i < n; i++) scanf("%d %d", &A[i], &B[i]); 14 for (int i = 0; i < m; i++) scanf("%d %d", &K[i], &P[i]); 15 memset(dp, 0x3f, sizeof dp); 16 for (int j = 0; j <= 10; j++) 17 { 18 dp[j][0] = 0; 19 for (int i = 0; i < m; i++) 20 { 21 if (P[i] > j) 22 { 23 for (int k = 1; k <= 1000; k++) 24 { 25 dp[j][k] = min(dp[j][k], K[i] * ((k + P[i] - j - 1) / (P[i] - j))); 26 } 27 } 28 } 29 } 30 31 for (int j = 0; j <= 10; j++) 32 { 33 for (int i = 1; i < m; i++) 34 { 35 for (int k = 1; k <= 1000; k++) 36 { 37 if (P[i] > j && k - (P[i] - j) >= 0) 38 { 39 dp[j][k] = min(dp[j][k], dp[j][k - (P[i] - j)] + K[i]); 40 } 41 } 42 } 43 } 44 45 long long sum = 0; 46 bool flg = true; 47 for (int i = 0; i < n; i++) 48 { 49 if (dp[B[i]][A[i]] >= INF) 50 { 51 flg = false; break; 52 } 53 sum += (long long)dp[B[i]][A[i]]; 54 } 55 if (!flg) puts("-1"); 56 else printf("%I64d\n", sum); 57 } 58 return 0; 59 }
百度之星2017资格赛1003 度度熊与邪恶大魔王
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。