第一题:超时购物
看到这道题的时候,我的想法是既然要拿最多的物品,那肯定是要从最小价值的东西拿起走,因此首先的想法就是将n件物品的价值排序。。然后从第一个开始取。
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n,V;
cin>>n>>V;
int num = 0;
int count = 0;
int a[n];
for (int i=0; i<n; i++) {
cin>>a[i];
}
sort(a, a+n);
for (int i=0; i<n; i++) {
if (num + a[i] >V) {
break;
}
num += a[i];
++count;
}
cout<<count<<endl;
return 0;
}
第二题:下起楼来我最快
这道题是说小赛有两种选择下楼,一种是坐电梯,一种是直接走楼梯。并没有说中途可以换,因此暂时不考虑。那就是说这道题就是算两个时间,然后比较时间大小,输出小的一个就是了。代码如下:
#include <stdio.h>
#include<iostream>
using namespace std;
int main(){
long n,m; //家住n层,电梯在m层
long t1,t2,t3,t4; //分别对应4个用时
long time1,time2; //第一个是乘电梯用时,第二个是走楼梯用时
cin>>n>>m;
cin>>t1>>t2>>t3>>t4;
long x = n>m?(n-m):(m-n); //电梯与楼层相隔几层
time1 = x*t1 + t2 + t3 + (n-1)*t1 + t2; //电梯先到达这一层->开门->关门->电梯再到达第一层->开门
time2 = (n-1)*t4;
cout<<(time1<time2?time1:time2)<<endl;
return 0;
}
开始是用的int型,结构只有80%的数据测试通过,说明需要支持更大的范围,于是改成long型就可以了。(可能网站上的编译器是16位的,int占2个字节。不然int占4个字节的话应该能包含完数据的吧。)