新生37
奖品,密码,吃萝卜
奖品:
题目描述
输入
输出
样例输入 Copy
5 15
2 4 4 8 10
样例输出 Copy
14
提示
40%的数据: 1<=n<=20
100%的数据: 1<=n<=100
#include<iostream> using namespace std; long long int f[100010],v[100010],w[100010]; int main(){ long long int n,m; cin>>n>>m; for(int i=1;i<=n;i++) cin>>v[i];for(int i=1;i<=n;i++) { for(int j=m;j>=v[i];j--) { f[j]=max(f[j],f[j-v[i]]+v[i]); } } cout<<f[m]<<endl; return 0; }
密码:
题目描述
输入
输出
样例输入 Copy
1233
67122
样例输出 Copy
68355
这题高精度加:
#include<iostream>//高精度加法 #include<cstring> using namespace std; int main(){ char ch1[1100],ch2[1100]; int la,lb,lc,i,a[1100],b[1100],c[1100]; cin>>ch1>>ch2; la=strlen(ch1); lb=strlen(ch2); lc=la>lb?la:lb; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(i=0;i<la;i++) { a[la-i-1]=ch1[i]-'0'; } for(i=0;i<lb;i++) { b[lb-i-1]=ch2[i]-'0'; } memset(c,0,sizeof(c)); for(i=0;i<lc;i++) { c[i]=a[i]+b[i]+c[i]; if(c[i]>=10) { c[i+1]=1; c[i]-=10; } } if(c[lc]>0) { lc++; } for(i=lc-1;i>=0;i--) { cout<<c[i]; } return 0; }
吃萝卜:
题目描述
在一个神奇的国度里,有一只编程兔,它每天都写很多的代码,各种编程语言如pascal、c、c++、java、basic等等它都了如指掌,各种算法也都已经滚瓜乱熟了。小花是它的好朋友,经常和它一起玩耍。
某一天,小花给编程兔送来了很多的萝卜。编程兔很开心,决定把它的萝卜和其它的小兔子一起分享。小花共计送来了n袋萝卜(编号1到n),每袋里面都有一定数量的萝卜。小兔子共计有m只,兔子们都很守规矩,按照编号1到m依次排好领取萝卜,萝卜按照编号从小到大的顺序依次发放(也就是编号小的兔子领取前面的萝卜,编号大的兔子领取后面的萝卜,萝卜一定要分完,不能有剩余),每只兔子都只能领取连续的若干袋萝卜,每只兔子至少领取一袋萝卜,一袋萝卜也只能分给一只兔子,不能分给两只以上的兔子。
编程兔希望萝卜尽量能分的平均一点(否则小兔子们要不开心的_),也就是它希望得到萝卜最多数量的兔子的萝卜要最少。这个问题对于编程兔来说很简单,亲爱的同学们,你们会么?
输入
第一行是两个正整数n和m,表示萝卜的袋数和兔子的数量。
第二行是n个正整数,表示每袋萝卜的数量。
输出
输出只有一行一个整数,表示得到萝卜最多的那只兔子最少可以得到的萝卜数量。
样例输入 Copy
9 3
1 2 3 4 5 6 7 8 9
样例输出 Copy
17
这个题看了一位大佬的博客,豁然开朗:
(33条消息) 吃萝卜 解题报告【二分答案】_xiaoruihang的博客-CSDN博客
这个题求的是最小的最大值,像什么最小的最大值,最大的最小值用二分来写
就是用二分来查找你要的那个答案
因此可以看出,此题的用意是让我们查找到一个合适的数,成为最大值,并且让这个最大值最小。
所以需要使用二分查找
两个边界值一定要确定好
#include<iostream> using namespace std; int n,m; const int N=1e5+10; int a[N]; int check(int x) { int sum=0,cnt=0; for(int i=0;i<n;i++) { sum+=a[i]; if(sum>x) { sum=a[i]; cnt++; } } cnt++; if(cnt>m) return 0; else return 1; } int main(){ cin>>n>>m; int l=0,r=0; for(int i=0;i<n;i++) { cin>>a[i]; l=max(l,a[i]); r+=a[i]; } while(l<r) { int mid=l+r>>1; if(check(mid)) r=mid; else l=mid+1; } cout<<l<<endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具