1 条题解
-
0
C++ :
#include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #define N 105 #define M 55 #define INF 99999999 using namespace std; priority_queue<int>ac; int num[N]; int n,m; int dfsMax=INF; int Max = -INF; int flag=0; int jobTime[M]; int cmp(const void* a,const void *b) { return *(int *)b - *(int *)a; } void dfs(int k) { if(k==n) { int temp= -INF; for(int i=0;i<m;i++) { if(temp<jobTime[i]) temp = jobTime[i]; } if(temp<Max) Max = temp; return; } else { for(int i=0;i<m;i++) { // if(Max<jobTime[i]+num[k]) continue;//放在这里的时间不知道为什么就会差那么远 jobTime[i]+=num[k]; //这里进行判断时间比较理想,特别是这个Max的变量,直接利用上一次的结果 //这里没有弄好就TLE的了!! if(jobTime[i]<Max) dfs(k+1); jobTime[i]-=num[k]; } } } int main() { int i; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&num[i]); qsort(num,n,sizeof(int),cmp); for(i=0;i<m;i++) ac.push(-num[i]); for(i=i;i<n;i++) { int temp = ac.top(); ac.pop(); temp-=num[i]; ac.push(temp); } Max = -INF; for(i=0;i<m;i++) { if(-ac.top()>Max) {Max = -ac.top();} ac.pop(); } //printf("%d\n",Max); memset(jobTime,0,sizeof(jobTime)); dfs(0); printf("%d\n",Max); return 0; }
信息
- ID
- 2169
- 时间
- 2000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 13
- 已通过
- 3
- 上传者