今天开始讲贪心,因为没啥模板,所以直接在题中感受吧
目录
思路很简单。举个例子:对于a=321,b=32。我们发现a+b=32132,b+a=32321,那么我们当然要后者,所以整个数组都按这个排列即可。
另外给你个技巧:题上说输入的类型是整型,但是你用什么接收那才是什么类型,直接用字符串接收多方便呀!学会了没
- #include
//拼数P1012 - #include
- #include
- using namespace std;
- bool cmp(string a,string b)
- {
- return a+b>b+a; //对于a=321,b=32,a+b=32132,b+a=32321,
- }
-
- int main()
- {
- string s[25];int n;cin>>n;
- for(int i=1;i<=n;i++) cin>>s[i];
- sort(s+1,s+n+1,cmp);
- for(int i=1;i<=n;i++) cout<
- return 0;
- }
题目:合并果子


思路:
额,刚开始看到这个题,猜你应该想到了一道很类似的题,只不过那道题是固定了只能相邻的合并,我们那个时候就是用到区间dp做的,当然dfs也可以完成这样的事情!好了,扯远了,回到这个题上吧!
贪心想法,直接先排个序,每次都按照花费最少代价去合并,合并后插入排序到对应位置即可即可。
其实直接使用优先级队列priority_queue会更快,它的内部是根堆结构,在插入新元素时排序说log(n)完成的。
- #include
- #include
- using namespace std;
- int main(){
- int n,a[10001],ans=0;
- cin>>n;
- for(int i=0;i
>a[i]; - sort(a,a+n);
- for(int i=1;i
- ans+=a[i-1]+a[i];
- a[i]=a[i-1]+a[i]; //把合并后的数放到a[i]
- for(int j=i+1;j
- if(a[j-1]>a[j])swap(a[j-1],a[j]); //交换排序,覆盖排序都可以(因为都是一趟就行),就是不要快排
- else break;
- }
- }
- cout<
- return 0;
- }
题目:凌乱yyy


思路:
我们只要按照结束时间去排序即可,遍历顺序每个比赛然后根据end时间能赶上这个比赛就参加,不能就不参加。没了!
- #include
- #include
- using namespace std;
- struct text{
- int sta;
- int end;
- };
- bool cmp(text a,text b) //当下最优化,谁先结束,就选谁
- {
- return a.end
- }
- int main()
- {
- int n,ans=1;cin>>n;text line[n]; //共n场考试
- for(int i=0;i
scanf("%d %d",&line[i].sta,&line[i].end); - sort(line,line+n,cmp); //将其按结束时间排序
- int tem=line[0].end;
- for(int i=1;i
- if(tem<=line[i].sta){ans++;tem=line[i].end;}
- cout<
- return 0;
- }
-
相关阅读:
Vue——全局组件、局部组件、组件的嵌套、单文件组件、组件的属性、v-slot: 插槽、css的作用域、面试题(组件基础)
JSD-2204-Dubbo实现微服务调用-Seata-Day03
表存储数据模型:宽列和时间序列
.NET 使用自带 DI 批量注入服务(Service)和 后台服务(BackgroundService)
Linux.定时任务crontab
Qt注册类对象单例与单类型区别
【C++11】函数的可变参数模板
Java中Math.ceil()方法具有什么功能呢?
SQL vs NoSQL: 为满足您的业务需求选择正确的数据库模型
java.sql.SQLException: Cannot set createTime: incompatible types
-
原文地址:https://blog.csdn.net/m0_69478376/article/details/134044534