题目:
送花
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 116 测试通过 : 41
题目描述
萌妹纸一般都比较喜欢漂亮的鲜花。每逢各种节日,她们都想收到鲜花作为礼物。如果你是有妹纸滴人,经常不送妹纸花的话,结果可想而知了。
当然咯,妹纸都是通情达理的,不会因为某几次你木有送花,就发你好人卡了。王童鞋作为一个比较节俭(抠门)的人便知道这一道理,因此他想在妹纸不给他发好人卡的前提下,送尽量少的花。
为了简单起见,我们定义一个妹纸的幸福指数H(初始为0 )。如果某天幸福指数H小于0,那就。。。
如果某天妹纸收到了花,幸福指数H会增加ai,如果没收到,会下降bi。不同的日子送花对幸福指数的增加可能会有所不同,比如在2月14号送花就会比2月15号效果好~
即告诉你总天数n(1<=n<=365),每天收到花幸福指数的增加值ai(1<=ai<=10),没收到花幸福指数的降低值bi,求为了让妹纸的幸福指数H一直>=0,王童鞋至少要送妹纸多少朵花。
输入
第一行为一个正整数T,表示有T组数据。
每组数据第一行有1个整数: n表示总天数1<=n<=365。
第二行为n个整数ai表示第i天收到花幸福指数的增加值,1<=ai<=10。第三行为n个整数bi表示第i天没收到花幸福指数的下降值,1<=bi<=10。
输出
一个整数表示最少需要送多少朵花。
样例输入
2
1
3
4
5
5 2 10 1 1
1 1 1 5 5
样例输出
1
2
题目来源
NUPT
题目分析:
贪心。先根据增加值进行贪心(从大到小排序)。然后枚举每一种情况即可。以下代码能够AC,但我不知道是否正确理解了出题人的意思,以下代码仅供参考。
代码如下:
/* * l.cpp * * Created on: 2015年3月29日 * Author: Administrator */ #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 366; struct Flower{ int up; int down; }flowers[maxn]; bool cmp(Flower a,Flower b){ return a.up > b.up; } int main(){ int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); int i; for(i = 0 ; i < n ; ++i){ scanf("%d",&flowers[i].up); } for(i = 0 ; i < n ; ++i){ scanf("%d",&flowers[i].down); } sort(flowers,flowers+n,cmp); int j; int cnt; int ans; for(i = 0 ; i < maxn ; ++i){ cnt = 0; ans = 0; for(j = 0 ; j <= i ; ++j){ // cnt = (i-j+1); ans += flowers[j].up; } for(j = i+1 ; j < n ; ++j){ ans -= flowers[j].down; if(ans < 0){ break; } } if((j >= n-1) && ans >= 0 ){ break; } } printf("%d\n",i+1); } return 0; }
时间: 2024-10-08 16:52:15