uva 607 Scheduling Lectures
2015-09-09 18:13
411 查看
你在一所学校教书,每节课时长L,你有n个主题必须要讲完,每个主题时常为ti。
有两个限制:1,每个主题只能在一节课内讲完,不能分开在多节课;2,必须按主题顺序讲,不能打乱。
对于每节课,讲完主题的内容会剩下时间t,如果t>10,会产生不满意度(t-10)^2,如果 1<=t<=10, 学生很高兴,所以产生不满意度是负数的-C,如果t=0, 那么不满意度为0.
问讲完所有主题,最少要用多少节课?如果有多种方案,要求不满意度最低。
num[i]表示讲完第i个主题,所用的最少节课
dp[i]表示讲完i个主题,用了num[i]节课的最低不满意度
// Created by Chenhongwei in 2015.
// Copyright (c) 2015 Chenhongwei. All rights reserved.
#include"iostream"
#include"cstdio"
#include"cstdlib"
#include"cstring"
#include"climits"
#include"queue"
#include"cmath"
#include"map"
#include"set"
#include"stack"
#include"vector"
#include"sstream"
#include"algorithm"
using namespace std;
typedef long long ll;
const int inf=2e9;
int n,l,c;
int sum[1010];
int num[1010],dp[1010];
int penalty(int x)
{
if(x==0)
return 0;
else if(x>=1&&x<=10)
return -c;
else
return (x-10)*(x-10);
}
int main()
{
//ios::sync_with_stdio(false);
// freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int Case=0;
while(scanf("%d",&n)&&n)
{
if(Case)
cout<<endl;
Case++;
cout<<"Case "<<Case<<':'<<endl;
scanf("%d%d",&l,&c);
sum[0]=0;
int tmp;
for(int i=1;i<=n;i++)
scanf("%d",&tmp),sum[i]=sum[i-1]+tmp;
num[0]=dp[0]=0;
for(int i=1;i<=n;i++)
{
num[i]=dp[i]=inf;
for(int j=0;j<i;j++)
if(l>=sum[i]-sum[j])
{
if(num[i]>num[j]+1)
{
num[i]=num[j]+1;
dp[i]=dp[j]+penalty(l-(sum[i]-sum[j]));
}
else if(num[i]==num[j]+1)
if(dp[i]>dp[j]+penalty(l-(sum[i]-sum[j])))
dp[i]=dp[j]+penalty(l-(sum[i]-sum[j]));
}
}
cout<<"Minimum number of lectures: "<<num
<<endl;
cout<<"Total dissatisfaction index: "<<dp
<<endl;
}
return 0;
}
有两个限制:1,每个主题只能在一节课内讲完,不能分开在多节课;2,必须按主题顺序讲,不能打乱。
对于每节课,讲完主题的内容会剩下时间t,如果t>10,会产生不满意度(t-10)^2,如果 1<=t<=10, 学生很高兴,所以产生不满意度是负数的-C,如果t=0, 那么不满意度为0.
问讲完所有主题,最少要用多少节课?如果有多种方案,要求不满意度最低。
num[i]表示讲完第i个主题,所用的最少节课
dp[i]表示讲完i个主题,用了num[i]节课的最低不满意度
// Created by Chenhongwei in 2015.
// Copyright (c) 2015 Chenhongwei. All rights reserved.
#include"iostream"
#include"cstdio"
#include"cstdlib"
#include"cstring"
#include"climits"
#include"queue"
#include"cmath"
#include"map"
#include"set"
#include"stack"
#include"vector"
#include"sstream"
#include"algorithm"
using namespace std;
typedef long long ll;
const int inf=2e9;
int n,l,c;
int sum[1010];
int num[1010],dp[1010];
int penalty(int x)
{
if(x==0)
return 0;
else if(x>=1&&x<=10)
return -c;
else
return (x-10)*(x-10);
}
int main()
{
//ios::sync_with_stdio(false);
// freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int Case=0;
while(scanf("%d",&n)&&n)
{
if(Case)
cout<<endl;
Case++;
cout<<"Case "<<Case<<':'<<endl;
scanf("%d%d",&l,&c);
sum[0]=0;
int tmp;
for(int i=1;i<=n;i++)
scanf("%d",&tmp),sum[i]=sum[i-1]+tmp;
num[0]=dp[0]=0;
for(int i=1;i<=n;i++)
{
num[i]=dp[i]=inf;
for(int j=0;j<i;j++)
if(l>=sum[i]-sum[j])
{
if(num[i]>num[j]+1)
{
num[i]=num[j]+1;
dp[i]=dp[j]+penalty(l-(sum[i]-sum[j]));
}
else if(num[i]==num[j]+1)
if(dp[i]>dp[j]+penalty(l-(sum[i]-sum[j])))
dp[i]=dp[j]+penalty(l-(sum[i]-sum[j]));
}
}
cout<<"Minimum number of lectures: "<<num
<<endl;
cout<<"Total dissatisfaction index: "<<dp
<<endl;
}
return 0;
}
相关文章推荐
- VRay 2.0 for SketchUp高级室内渲染教程锌
- MyBatis解决字段名与实体类属性名不相同的冲突
- shell命令
- 启动嵌入式间:资源有限的系统启动
- java-基础巩固 3
- java String的几个函数
- su -认证失败
- HTML5 requestAnimationFrame的使用
- ubuntu14.04 nginx + fmp + mysql
- LeetCode之Sort List
- qt5.4 msvc2013_64安装 目标计算机不匹配问题
- 四个信号说明肝脏有毒素
- mysql 实现批量导入,并解决中文乱码问题
- PHP 开发者应了解的24个库
- extjs中treepanel例子
- 一些新学习的VBS知识笔记
- 欢迎使用CSDN-markdown编辑器
- java如何实现发邮件功能。
- 趣味linux
- MongoDB学习日记(四):CRUD - insert