HDU 1789 Doing Homework again 贪心 DP
2016-12-26 12:02
513 查看
传送门:HDU 1789 Doing Homework again
分析:
这里默认作业的期限 也不会超过1000 所以我们vis数组也就是开的1010 果不其然 数据并没有超过100的
贪心策略:排序预处理 + 期限尽量从后面开始考虑。
代码如下:
分析:
这里默认作业的期限 也不会超过1000 所以我们vis数组也就是开的1010 果不其然 数据并没有超过100的
贪心策略:排序预处理 + 期限尽量从后面开始考虑。
代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f #define ms(x, y) memset(x, y, sizeof(x)) const double PI = acos(-1.0), eps = 1e-8; struct homeW { int deadl,scor; }h[1010]; bool vis[1010]; int cmp(homeW a, homeW b) { if(a.scor == b.scor) return a.deadl < b.deadl; return a.scor > b.scor; } int main() { int cas,i,j,n; scanf("%d",&cas); while(cas--) { scanf("%d",&n); // ms(dp, 0); ms(vis, 0); // maxDead = -1; for(i=1; i<=n; i++) scanf("%d",&h[i].deadl); for(i=1; i<=n; i++)++ scanf("%d",&h[i].scor); // 期限升序 扣分降序排序 (弄反了 扣分优先考虑) sort(h+1, h+n+1, cmp); int sum = 0; for(i=1; i<=n; i++) { // 对已按优先度排序后的序列进行预定 for(j=h[i].deadl; j>=1; j--) { // 期限尽量从后面开始考虑 if(!vis[j]) { vis[j] = 1; // 预定期限 break; } } if(j == 0) sum += h[i].scor; } printf("%d\n",sum); } return 0; }
相关文章推荐
- hdu 1789 Doing Homework again 贪心
- hdu 1789 Doing Homework again(简单贪心)
- HDU 1789 Doing Homework again(贪心)
- hdu 1789 Doing Homework again(贪心)
- hdu 1789 Doing Homework again (贪心)
- 贪心-hdu-1789-Doing Homework again
- HDU-1789 Doing Homework again 动态规划 Or 贪心
- HDU 1789 Doing Homework again(贪心)
- HDU 1789 Doing Homework again (贪心)
- hdu 1789 Doing Homework again (贪心)
- hdu 1789 Doing Homework again 贪心+优先队列
- HDU 1789 Doing Homework again(排序,DP)
- HDU 1789 Doing Homework again (贪心)
- hdu 1789 doing homework again(贪心)
- Doing Homework again(hdu1789,贪心)
- 贪心-hdu-1789-Doing Homework again
- HDU 1789 Doing Homework Again( 贪心 )
- hdu1789——Doing Homework again(贪心)
- Doing Homework again - HDU 1789 背包dp
- HDU 1789 Doing Homework again (贪心)