问题 D: 年终奖金
来源:互联网 发布:淘宝商品佣金查询 编辑:程序博客网 时间:2024/06/16 10:22
题目描述
***公司承接了N个项目需要年底完成,每个项目有一定的难度系数。由于项目太多了,需要招聘大量的技术人员。要求每个技术人员至少完成K个项目。
考虑到有些项目之间相似性以及项目的难易程度,为了避免某些员工只挑选轻松项目,CEO提出了一个奖励机制,当技术人员完成分配给他的任务后,年终可以得到一笔奖金,其得到的酬金将是C + (Tmax–Tmin)2。其中,Tmax表示所做项目的最大的难度系数,Tmin是难度系数的最小值。
你能否计算一下,为了完成所有项目,***公司年终至少需要支付多少酬金?
输入
输入有多组测试数据。对每组测试数据:
第一行: N K C (1<=N,K<=100 1<=C<=5000 )
第二行 N个正整数分别描述N个项目的难度系数。(1<=难度系数<=10000)
输出
对每组测试数据:输出占一行,一个整数。即,***公司年终至少需要支付的酬金数。
样例输入
2 1 1
2 4
10 2 3
1 4 10 3 10 1 8 3 8 3
样例输出
213
提示
第一组测试数据,如果一个人完成,酬金为1 + (4–2)2 = 5;如果分给两个人去完成,收费为1 + 1 = 2。
这题动态规划,不过本人动态规划太差还求不出转移方程,所以借鉴了下队友的。不多做注释自己看吧
下面是代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>#include <math.h>#include <string.h>using namespace std;int main(){ int a[150]; int dp[150]; int N,K,C; while(scanf("%d%d%d",&N,&K,&C)!=EOF) { memset(a,0,sizeof(a)); for(int i=1; i<=N; i++) { cin>>a[i]; } sort(a+1,a+N+1); memset(dp,0x3f3f3f3f,sizeof(dp)); dp[0]=0; for(int i=K; i<=N; i++) //这个人的 { for(int j=1; j<=i; j++) //前一个人的 { if(i-j<K-1) continue; dp[i]=min(dp[i],dp[j-1]+(a[i]-a[j])*(a[i]-a[j])+C); //转移方程 } } cout<<dp[N]<<endl; } return 0;}
阅读全文
0 0
- 问题 D: 年终奖金
- 河南省第十届ACM省赛题目:问题 D: 年终奖金
- 年终奖金
- 河南第十届ACM省赛-D-年终奖金
- 河南省第十届ACM题解 D 年终奖金
- D 年终奖金 河南第十届ACM真题 【dp】
- 2017年河南省ACM省赛 Problem D: 年终奖金
- 省赛 年终奖金
- [图示]年终奖金、加薪与KPI
- haut 1273: 年终奖金(区间DP)@
- 河南省第十届大学生程序设计竞赛 年终奖金
- 关于R-D问题
- D - 棋盘问题
- 问题 D: 合唱队形
- d森林问题
- 问题 D: 电梯
- /etc/sudoers.d问题
- 问题 D 高精度加法
- Problem B: 从点到面
- Problem C: 点在圆内吗?
- 嵌入式SQLite数据库架构和设计
- 利用 双向循环链表 实现通讯录的功能
- Problem D: 质心算法
- 问题 D: 年终奖金
- PCLK,VSYNC和HSYNC的关系
- 14. Longest Common Prefix
- Java 关于类型类、this.getClass()的理解
- 数位DP HDU3555+CF55D+HDU2089
- [LeetCode
- MySQL存储引擎
- 链表排序
- JAVA传入换行属性