uva607
2016-03-05 12:18
411 查看
题意:
有n个主题。每堂课的时间是L。每个主题各要求t1,t2,…tn(1<=ti<=L)。对于每个主题,你要决定要哪堂课教。并且有如下的规则:
1.每个主题必须完整地包含在一堂课里。不能分成两部分教。
2.主题之间的顺序不能调换,即主题i必须在主题i+1之前教。
同时,如果在每堂课的最后如果能留有10分钟以内的时候,那么学生的不满意程序是最小的。不满意程度的计算如下所示:
D=0(如果剩下的时间是0)。
D=-c(如果剩下的时间在10分钟以内)。
D=(t-10)^2(剩下的情况)
思路:
dp[i, j]表示前i节课,覆盖j个知识点的最小不满意度。
贪心 + dp
代码:
有n个主题。每堂课的时间是L。每个主题各要求t1,t2,…tn(1<=ti<=L)。对于每个主题,你要决定要哪堂课教。并且有如下的规则:
1.每个主题必须完整地包含在一堂课里。不能分成两部分教。
2.主题之间的顺序不能调换,即主题i必须在主题i+1之前教。
同时,如果在每堂课的最后如果能留有10分钟以内的时候,那么学生的不满意程序是最小的。不满意程度的计算如下所示:
D=0(如果剩下的时间是0)。
D=-c(如果剩下的时间在10分钟以内)。
D=(t-10)^2(剩下的情况)
思路:
dp[i, j]表示前i节课,覆盖j个知识点的最小不满意度。
贪心 + dp
代码:
#include <iostream> using namespace std; #include <stdio.h> #include <cstring> const int INF= 0x7ffffff; int n,L,C; int topic[1005]; int dp[1005][1005]; int sum[1005]; int value(int k) { int t = L - k; if(t == 0) return 0; else if(t > 0 && t <= 10) return -1 * C; else if(t > 10) return (t - 10) * (t - 10); } int main() { int T = 0; while(scanf("%d",&n) &&n) { scanf("%d %d",&L,&C); sum[0] = 0; for(int i = 1; i <= n; i++) { scanf("%d",&topic[i]); sum[i] = sum[i - 1] + topic[i]; } for(int i = 0; i <= n; i++) { dp[i][0] = 0; for(int j = 1; j <= n; j++) dp[i][j] = INF; } for(int i = 1; dp[i - 1] == INF; i++) { for(int j = i; j <= n && sum[j] <= i * L;j++) { for(int k = j; k >= i - 1; k--) { if(sum[j] - sum[k] <= L && dp[i - 1][k] != INF) dp[i][j] = min(dp[i][j],dp[i - 1][k] + value(sum[j] - sum[k])); else if(sum[j] - sum[k] > L) break; } } } int i; for( i = 1; i <= n; i++) if(dp[i] != INF) break; if(T) printf("\n"); printf("Case %d:\n",++T); printf("Minimum number of lectures: %d\n",i); printf("Total dissatisfaction index: %d\n",dp[i] ); } return 0; }
相关文章推荐
- 深入研究java.lang.Class类
- oracle插入特殊字符'&'问题
- 数据结构——算法之(010)( 字符串的左旋转操作)
- An error I have completed recently
- XML和JSon数据的解析
- ubuntu 安装 音视频解码器
- uva714 - Copying Books
- 查看linux下mysql版本
- 解决Linux 下 root用户删除文件提示:Operation not permitted
- LeetCode 50 - Pow(x, n)
- seoreZgniliarTlairotcaF.172
- HttpSession详解
- hrbust 哈理工oj 1360 Leyni的国家III【多路径并查集】
- hdu3829 二分匹配 最大独立集
- 工程导入 GIT 源代码
- hdu3829 二分匹配 最大独立集
- 个人比较喜欢用的省市联动
- 常用的linux命令
- STL---随机数发生器
- 动态规划要诀