与其说贪心算法是一种算法,不如说贪心算法是一种思想。
贪心嘛,人的本性,总是想要获得更多的利益,却不会放眼全局,所以贪心算法的思想
就是在眼前选择最优的方案。但是贪心无法顾及全局,所以在做题前,要先用数学确定
是否可以使用贪心。
详见 贪心算法_百度百科 (baidu.com)
接下来给大家看几道题的题解:
1962: 排队接水(经典):#include
#include
using namespace std;
int n;
double sum;
int tot;
struct a{
int t;
int number;
}x[1005];
bool cmp(a x,a b){
return x.t>n;
for(int i=1;i<=n;i++){
cin>>x[i].t;
x[i].number=i;
}
sort(x+1,x+n+1,cmp);
for(int i=1;i<=n;i++){
cout<
2048: 金银岛2
#include
using namespace std;
int w;
int s;
int ans=0;
int n[100];
int v[100];
void dfs(int t=0,bool sel=0,int sumw=0,int sumc=0){
if(t>s){
return;
}
if(sel){
sumw+=n[t];
sumc+=v[t];
if(sumw>w){
return;
}
ans=max(ans,sumc);
}
dfs(t+1,0,sumw,sumc);
dfs(t+1,1,sumw,sumc);
}
int main(){
int t;
cin>>t;
while(t--){
cin>>w>>s;
for(int i=1;i<=s;i++){
cin>>n[i]>>v[i];
}
ans=0;
dfs();
cout<
1044: 【NOIP2002】均分纸牌:
#include
using namespace std;
int sum=0;
int cnt;
int main(){
int n;
int a[105];
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
int avg=sum/n;
for(int i=1;i<=n;i++){
int d=a[i]-avg;
if(d==0){
continue;
}else{
a[i+1]+=d;
cnt++;
}
}
cout<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)