- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM模板2
贪心算法1.心急C小加C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?输入第一行是一个整数T(1T1500),表示输入数据一共有T组。每组测试数据的第一行是一个整数N(1=N=5000),表示有N个木棒。接下来的一行分别输入N个木棒的L,W(0 L ,W = 10000),用一个空格隔开,分别表示木棒的长度和质量。输出处理这些木棒的最短时间。#includestdio.h#includeiostream#includealgorithm#includestring.husing namespace std;struct p{int p1,p2;bool l;};bool cmp(p x,p y){if(x.p2y.p2)return true;elseif(x.p2==y.p2x.p1y.p1)return true;return false;}int main(){ int i,j,n,m,sum;p q[5001];int a;scanf(%d,n);while(n--){memset(q,0,sizeof(q));scanf(%d,m);for(i=0;im;i++){scanf(%d%d,q[i].p1,q[i].p2);q[i].l=1;} sort(q,q+m,cmp); sum=0;for(j=0;jm;j++){a=q[j].p1;if(q[j].l==0){continue;}for(i=j+1;im;i++){if(q[i].la=q[i].p1){q[i].l=0; a=q[i].p1;}}sum++;}printf(%d\n,sum);}return 0;}2.会场安排问题#includestdio.h#include vector#includealgorithm#includemath.husing namespace std;struct activ {int begin;int end;};bool cmp( activ a,activ b){return a.endb.end;}int main(){int n;scanf(%d,n);while (n--){int m;scanf(%d,m);vectoractiv vec;for(int i=0;im;i++){activ a;scanf(%d%d,a.begin,a.end);vec.push_back(a);}sort(vec.begin(),vec.end(),cmp);int count=vec.size();int k=0;for (int i=1;ivec.size();i++){if(vec[i].begin = vec[k].end) count--;else k=i;}printf(%d\n,count);}return 0;}2.过河问题 #include cstdio#include iostream#include algorithmusing namespace std;int a[1005];int min(int a, int b){ return a b ? a : b;}int fun(int n){ if(n = 2) return a[n]; else if(n == 3) return a[1]+a[2]+a[3]; else { return fun(n-2) + min(a[n]+a[n-1]+2*a[1], a[n]+a[1]+2*a[2]); }}int main(){ int T, n; scanf(%d, T); while(T--) { scanf(%d, n); for(int i = 1; i = n; ++i) scanf(%d, a[i]); sort(a+1, a+n+1); printf(%d\n, fun(n)); } return 0;} 动态规划1.单调递增最长公子序列#include stdio.h#include string.hint main(){int t,i,j;scanf(%d, t);while(t--){char s[10005]={0};int dp[10005]={0};scanf(%s, s);int l = strlen(s), max=0;for( i=0; il; i++){for( j=0; ji; j++)if(s[j]s[i] dp[i]dp[j]) dp[i]=dp[j];dp[i]+
原创力文档


文档评论(0)