贪心算法啊
(1)换硬币购物问题
#include<iostream>
#include<algorithm>
using namespace std;
int m,n,num[1010];
int main()
{
cin>>m>>n;
int i,j,sum=0,ans=0;
for(i=1;i<=n;i++)
{
cin>>num[i];
}
sort(num+1,num+1+n);
if(num[1]!=1)
{
cout<<-1;
return 0;
}
while(true)
{
if(sum>=m)
{
cout<<ans;
return 0;
}
for(i=n;i>=1;i--)
if(num[i]<=sum+1)
{
sum+=num[i];
ans++;
break;
}
}
return 0;
}
(2)java bean贪心问题
package 贪心算法;
import java.text.DecimalFormat;
import java.util.Scanner;
public class JavaBean贪心算法贪javabing {
public static void main(String[] args) {
DecimalFormat df2 = new DecimalFormat("#.000");
Scanner cin=new Scanner(System.in);
int m;
int i,j,n;
double []a=new double[1000];
double []b=new double[1000];
double []c=new double[1000];
double sum=0,t;
while(cin.hasNext())
{
m=cin.nextInt();
n=cin.nextInt();
if(m!=-1&&n!=-1){
for(i=0;i<n;i++)
{
a[i]=cin.nextDouble();
b[i]=cin.nextDouble();
}
for(i=0;i<n;i++)
if(b[i]==0)
{
sum=sum+a[i];b[i]=-1;
}
for(i=0;i<n;i++)
c[i]=a[i]/b[i];
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(c[i]<c[i+1])
{
t=c[i];c[i]=c[i+1];c[i+1]=t;
t=a[i];a[i]=a[i+1];a[i+1]=t;
t=b[i];b[i]=b[i+1];b[i+1]=t;
}
}
for(i=0;i<n;i++)
{
if(b[i]!=-1)
{
if(m>=b[i]){
m=(int) (m-b[i]);
sum=sum+a[i];
}else{
sum=sum+c[i]*m;break;
}
}
}
System.out.println(df2.format(sum));
sum=0;
}
}
}
}
(3)01背包最大单位价值量
package 贪心算法;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
public class Main背包单位价值问题 {
private static class Node {
double v;
double w;
double vw;
}
private static class Reader {
static BufferedReader reader;
static StringTokenizer tokenizer;
static void init(InputStream input) {
reader = new BufferedReader(
new InputStreamReader(input));
tokenizer = new StringTokenizer("");
}
static String next() throws IOException {
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(
reader.readLine());
}
return tokenizer.nextToken();
}
static int nextInt() throws IOException {
return Integer.parseInt(next());
}
static double nextDouble() throws IOException {
return Double.parseDouble(next());
}
}
public static void main(String[] args) {
try {
Reader.init(System.in);
while (true) {
int m = Reader.nextInt();
int n = Reader.nextInt();
if (n == -1 && m == -1) {
break;
}
List<Node> list = new ArrayList<Node>();
for(int i = 1;i <= n;i++){
Node node = new Node();
node.v = Reader.nextDouble();
node.w = Reader.nextDouble();
node.vw = node.v/node.w;
list.add(node);
}
Collections.sort(list, new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
if(o2.vw > o1.vw){
return 1;
}
else if(o2.vw < o1.vw){
return -1;
}
else
return 0;
}
});
double count = 0 ;
for(int i = 0; i < list.size();i++){
Node node = list.get(i);
if(m <= 0)
break;
else{
if(m - node.w >= 0){
count += node.v;
m -= node.w;
}
else{
count += m/node.w*node.v;
m = 0;
}
}
}
System.out.printf("%.3f\r\n",count);
}
}catch (Exception e){
}
}
}
(4)贪心算法活动安排问题
package 贪心算法;
import java.util.Scanner;
public class Main活动安排问题 {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
int m=cin.nextInt();
int s[]=new int[m+1];
int []f=new int[m+1];
boolean []a=new boolean[m+1];
for(int j=1;j<=m;j++)
{
s[j]=cin.nextInt();
}
for(int k=1;k<=m;k++)
{
f[k]=cin.nextInt();
}
int n=s.length-1;
int count=1;
a[1]=true;
int j=1;
for(int i=2;i<=n;i++)
{
if(s[i]>=f[j])
{
a[i]=true;
j=i;
count++;
}else{
a[i]=false;
}
}
System.out.println(count);
for(int i=1;i<=n;i++)
{
if(a[i]==true)
{
System.out.println(i+" ");
}
}
}
System.out.println();
}
}