1、接水问题 NOIP2010普及组
思路暴力模拟。
我们定义一个数组:a[i],表示第 i 个水龙头目前的总时间。
1、每次输入一个数就加入第一个水龙头。
2、然后从小到大排序。所以a[0]j 每次都是时间最小的那个水龙头 。
3、重复1,2。
4、最后输出时间最长的水龙头。
voctor版
#include<bits/stdc++.h>
using namespace std;
int main()
{ int n,m;
cin>>n>>m;
vector <int> a;//有m个水龙头,初始没人,时间总和为0
a.resize(m,0);
int b;
for(int i=0;i<n;i++)
{
cin>>b;//读入数据
a.at(0)=a.at(0)+b;//数据加进时间总和最少的水龙头里
sort(a.begin(),a.begin()+m);//快排,刚好从小到大
}
cout<<a[m-1]<<endl;//输出最后一个(时间总和最大的)
return 0;
}
数组版
#include<bits/stdc++.h>
using namespace std;
int main()
{ int n,m;
cin>>n>>m;
int a[m]={0};//有m个水龙头,初始没人,时间总和为0
int b;
for(int i=0;i<n;i++)
{
cin>>b;//读入数据
a[0]=a[0]+b;//数据加进时间总和最少的水龙头里
sort(a,a+m);//快排,刚好从小到大
}
cout<<a[m-1]<<endl;//输出最后一个(时间总和最大的)
return 0;
}
2、纪念品分组 NOIP2007普及组
这道题是一个贪心题,读入之后先用sort排序,然后用两个指针一起向中间走,每次选择都尽可能的让当前状态下最大的和最小的分在一组,如果不行就最大的单独分一组,这样贪心下来就是最少分的组了。
#include<bits/stdc++.h>
using namespace std;
int W,ans=0;
int n,a[30001];
int l,r,i;
int main()
{ scanf("%d%d",&W,&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
l=1; r=n;
while(l<=r)//一定要有等号。
{
if(a[l]+a[r]<=W) //一定要有等号。
l++,r--,ans++;
else
r--,ans++; //贪心过程
}
printf("%d",ans);
return 0;
}
3、积木大赛 NOIP2013提高组
贪心策略:每当我们扫到一个数,如果它大于前一个数答案就加上差值,正确性?
这是比较显然的,如果比前一个数小,那么减前一个数时就可以顺便把他减掉,如果大于则还得自己减。
#include <iostream>
using namespace std;
int main()
{
int n,a,last=0,ans=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
if(a>last) ans+=(a-last);
last=a;
}
cout<<ans<<endl;
}
4、铺设道路 NOIP2018 提高组
#include <iostream>
using namespace std;
int main()
{
int n,a,last=0,ans=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
if(a>last) ans+=(a-last);
last=a;
}
cout<<ans<<endl;
}
5、均分纸牌 NOIP2002 提高组
这个题最关键的是贪心的思想,想明白了代码实现应该就没有问题了
因为每堆牌只能移到相邻的堆,不妨一堆堆处理,且只考虑后一堆(因为前一堆已经处理好了,再移动会造成浪费)。
那么如果出现了负数呢?如1,1,7的情况,从左到右处理过程如下:
1,1,7
-2,-2,4
0,-4,4
0,0 ,0
#include<bits/stdc++.h>
using namespace std;
int a[10010];
int n;
int sum=0,x=0,to1=0;
int main()
{ cin>>n;
for(int i=1;i<=n;i++)
{ cin>>a[i];
sum+=a[i];
}
x=sum/n;
for(int i=1;i<=n;i++) a[i]=a[i]-x;
for(int i=1;i<=n;i++)
{ if(a[i]==0) continue;
a[i+1]=a[i]+a[i+1];
to1++;
}
cout<<to1;
return 0;
}
6、导弹拦截 NOIP1999普及组
7、三国游戏
1、扑克牌