链接:click here~~
题意:
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
【解题思路】:
直接模拟一边就可以,不知道想简单了还是数据太弱,预处理之后,直接判断递减的导弹的数目,判断过的就标记0.
代码:
#include <stdio.h> #include <string.h> #include <algorithm> #include<iostream> using namespace std; int main() { int a[10000],n; while((scanf("%d",&n))!=EOF) { for (int i=0; i<n; i++) scanf("%d",&a[i]); int sum=0; for (int i=0; i<n; i++) if(a[i]){ sum++; int h=a[i]; for (int j=i+1; j<n; j++) if (a[j]!=0&&h>=a[j]) { h=a[j]; a[j]=0; } } cout<<sum<<endl; } return 0; }
HDU 2111
J - Saving HDU
链接:click here~~
题意:
多种宝贝,种类不少 ,每种宝贝单位体积的价格也不一样 计算出来XHD最多能带回多少价值的宝贝?(假设宝贝可以分割,分割后的价值和对应的体积成正比)
【解题思路】:贪心选取就可以了。。注意当前已经选取了价值最大的,剩下的不足以继续选,那么就直接乘以接下来的体积,然后记得一定要跳出循环!
代码:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; const int maxn=105; int n,m,t,i,j,s,num,ans; struct node { int val,V; } p[maxn]; bool cmp(node a,node b) { return a.val>b.val; } int main() { int tot=1; while(~scanf("%d",&n)&&n) { scanf("%d",&m); for(i=0; i<m; i++) scanf("%d%d",&p[i].val,&p[i].V); sort(p,p+m,cmp); int s=0; for(i=0; i<m; i++) { if(n>p[i].V) { s+=p[i].val*p[i].V; n-=p[i].V; } else { s+=p[i].val*n; break; } } cout<<s<<endl; } return 0; }
时间: 2024-10-13 11:52:34