10.11 noip模拟试题
2016-10-11 14:29
183 查看
4题均为128M,1s
1. 锻炼计划(exercise.pas)
身体是革命的本钱,OIers不要因为紧张的学习和整天在电脑前而忽视了健康问题。小x设计了自己的锻炼计划,但他不知道这个计划是否可行,换句话说如果计划不当可能会让他的体力超支,所以小x请你帮助他。
一天有1440分钟,所以小x列出的是这一整天第1至第1440分钟的计划。小x的体力用一个整数来表示,他会按照计划表进行锻炼,同时,每分钟小x的体力会自动增加1。如果某一分钟末小x的体力小于等于零,那么可怜的小x就累死了……
输入(exercise.in)
第一行是用空格分开的两个整数n,m,分别表示小x的初始体力值和计划的项目数量。
从第二行开始的m行,每行描述一个锻炼项目:名称、开始时间a、结束时间b、每分钟耗费的体力(用空格分隔),表示此项目从第a分钟初开始,第b分钟末结束。锻炼项目按照开始时间递增顺序给出,不会出现两个项目时间冲突的情况。
输出(exercise.out)
输出包括两行,如果计划可行,第一行输出"Accepted",第二行输出这一天过后最后剩余的体力;否则在第一行输出"Runtime Error",第二行输出在第几分钟累死。
样例
约定
0<n<=2^31-1
0<=m<=500
所有中间值的绝对值不会超过2^31-1
每一个锻炼项目的名称不超过20个字符,其中不含空格。
XXX偷懒用读入优化无视字符没想到字符里面由数字QAQ
View Code
1. 锻炼计划(exercise.pas)
身体是革命的本钱,OIers不要因为紧张的学习和整天在电脑前而忽视了健康问题。小x设计了自己的锻炼计划,但他不知道这个计划是否可行,换句话说如果计划不当可能会让他的体力超支,所以小x请你帮助他。
一天有1440分钟,所以小x列出的是这一整天第1至第1440分钟的计划。小x的体力用一个整数来表示,他会按照计划表进行锻炼,同时,每分钟小x的体力会自动增加1。如果某一分钟末小x的体力小于等于零,那么可怜的小x就累死了……
输入(exercise.in)
第一行是用空格分开的两个整数n,m,分别表示小x的初始体力值和计划的项目数量。
从第二行开始的m行,每行描述一个锻炼项目:名称、开始时间a、结束时间b、每分钟耗费的体力(用空格分隔),表示此项目从第a分钟初开始,第b分钟末结束。锻炼项目按照开始时间递增顺序给出,不会出现两个项目时间冲突的情况。
输出(exercise.out)
输出包括两行,如果计划可行,第一行输出"Accepted",第二行输出这一天过后最后剩余的体力;否则在第一行输出"Runtime Error",第二行输出在第几分钟累死。
样例
Input | Output |
10 1 Basketball 1 10 1 | Accepted 1440 |
1 1 Nunchakus 1 1 2 | Runtime Error 1 |
0<n<=2^31-1
0<=m<=500
所有中间值的绝对值不会超过2^31-1
每一个锻炼项目的名称不超过20个字符,其中不含空格。
XXX偷懒用读入优化无视字符没想到字符里面由数字QAQ
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #define maxn 5010 using namespace std; int n,m,f[maxn][maxn/10],p[maxn],path[maxn]; vector<int>c[maxn],v[maxn]; int init(){ int x=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} return x*f; } void Dfs(int x,int y){ if(x<=0)return; for(int i=0;i<=p[x];i++) if(f[x][y]==f[x-1][y-c[x][i]]+v[x][i]){ path[x]=i+1;Dfs(x-1,y-c[x][i]); } } int main() { freopen("diablo.in","r",stdin); freopen("diablo.out","w",stdout); n=init();m=init(); int ci,vi; for(int i=1;i<=n;i++){ ci=init();p[i]=init(); for(int j=1;j<=p[i];j++){ vi=init(); c[i].push_back(ci*j); v[i].push_back(vi); } c[i].push_back(0); v[i].push_back(0); } for(int i=1;i<=n;i++) for(int j=m;j>=0;j--){ int s=c[i].size(); f[i][j]=f[i-1][j]; for(int k=0;k<s;k++) if(j>=c[i][k]) f[i][j]=max(f[i][j],f[i-1][j-c[i][k]]+v[i][k]); } printf("%d\n",f [m]); Dfs(n,m); for(int i=1;i<=n;i++) printf("%d\n",path[i]%(p[i]+1)); return 0; }
View Code
相关文章推荐
- 9.22 noip模拟试题
- NOIP2011-普及组复赛模拟试题-第二题-买票
- CCF-NOIP-2018 提高组(复赛) 模拟试题(一)
- CCF-NOIP-2018 提高组(复赛) 模拟试题(七)
- 【图-最小生成树】NOIP2010 模拟试题 新的开始
- NOIP2012 模拟试题二 腾讯大战360
- 10.4 noip模拟试题
- 冲刺NOIP2011 模拟试题(七)
- 【备战NOIP2012图论专项模拟试题】砍树 纪中3079 dfs
- 高中纪中OJ3077. 【备战NOIP2012图论专项模拟试题】外星人入侵 题解
- 10.24 noip模拟试题
- 高中纪中OJ3078. 【备战NOIP2012图论专项模拟试题】无线通讯网
- 10.25 noip模拟试题
- 纪中高中OJ3079. 【备战NOIP2012图论专项模拟试题】砍树题解
- 10.5 noip模拟试题
- 10.6 noip模拟试题
- 10.26 noip模拟试题
- 2016.08.17【初中部 NOIP提高组 】模拟赛C(图论专项模拟试题)
- 【备战NOIP2012图论专项模拟试题】砍树
- 10.7 noip模拟试题