意甲冠军 参加大ACM竞争是非常回落乔布斯 每一个工作都有截止日期 未完成必要的期限结束的期限内扣除相应的积分 求点扣除的最低数量
把全部作业按扣分大小从大到小排序 然后就贪阿 能完毕前面的就完毕前面的 实在不能的就扣分吧~
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 1005; int dli[N], red[N], k[N], cas, ans, n; bool vis[N]; bool cmp (int i, int j) { return red[i] > red[j]; } int main() { scanf ("%d", &cas); while (cas--) { ans = 0; memset (vis, 0, sizeof (vis)); scanf ("%d", &n); for (int i = 1; i <= n; ++i) scanf ("%d", &dli[i]), k[i] = i; for (int j = 1; j <= n; ++j) scanf ("%d", &red[j]); sort (k + 1, k + n + 1, cmp); for (int i = 1, j; i <= n; ++i) { for (j = dli[k[i]]; j >= 1; --j) if (!vis[j]) { vis[j] = 1; break; } if (j == 0) ans += red[k[i]]; } printf ("%d\n", ans); } return 0; }<span style="font-family:Comic Sans MS;"> </span>
Doing Homework again
Each test case start with a positive integer N(1<=N<=1000) which indicate the number of homework.. Then 2 lines follow. The first line contains N integers that indicate the deadlines of the subjects, and the next line contains N integers that indicate the reduced scores.
版权声明:本文博主原创文章。博客,未经同意不得转载。