考虑最大利润
输入:种类数、需求量、各种类的库存量、各种类的总价
输出:最大利润
#include #include //调用sort排序using namespace std;struct mooncake{double store;double price;double tprice;}cake[1000];bool cmp(mooncake a,mooncake b){return a.price>b.price;}int main(){int kinds;double needs,profits=0;cin>>kinds>>needs;for(int i=0;i<kinds;i++)cin>>cake[i].store;for(int i=0;i<kinds;i++){cin>>cake[i].tprice;cake[i].price=cake[i].tprice/cake[i].store;}sort(cake,cake+kinds,cmp);//由大到小排序for(int i=0;i<kinds;i++){if(cake[i].store<=needs)//供应充足{needs-=cake[i].store;//更新需求量profits=cake[i].tprice;}else{//供应不足:一定要手动结束,否则会继续循环profits+=cake[i].price*needs;//由单价一个个算出 break;//手动结束}}cout<<profits;return 0;}
考虑最小数
输入:0-9位数的次数
输出:由该数所组成的最小数
#include using namespace std;int main(){int count[10];//分别记录0-9的个数for(int i=0;i<10;i++)cin>>count[i];for(int i=1;i<10;i++)//先确定首位if(count[i]>0){cout<<i;count[i]--;break;}//直接由0-9一个个输出for(int i=0;i<10;i++)//循环各个位数for(int j=0;j<count[i];j++)//判断每个位数的次数 cout<<i;return 0;}
统计不相交的区间个数-区间贪心
输入:区间个数、各区间的左右端点
输出:不相交的区间个数
#include #include //sort方法using namespace std;struct interval{//定义区间结构体int left;int right;}inter[100];bool cmp(interval a,interval b){if(a.left!=b.left) return a.left>b.left;//左端点由大到小排序else return a.right<b.right;//右端点由小到大排序}int main(){int n;int count=1;//记录不相交的区间个数 cin>>n;for(int i=0;i<n;i++)cin>>inter[i].left>>inter[i].right;sort(inter,inter+n,cmp);int lastval=inter[0].left;//存最大的:最右端的左端点for(int i=1;i<n;i++)if(inter[i].right<=lastval)//右端点小于左端点,说明这两个区间不相交{lastval=inter[i].left;//更新左端点count++;}else count--;cout<<count<<endl;return 0;}
贪心算法:考虑当前情况下局部最优的策略,从而使全局达到最优的方法