链接:​​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;
}