(个人训练赛) poj1064 poj3616 poj3041
来源:互联网 发布:大数据是一种思维方式 编辑:程序博客网 时间:2024/05/16 14:58
这个poj1064其实是白书上的原题,但是不小心定义了一个重复变量,完全没看出来。导致我精度控制本应该输出2.01输出了2,然后导致我看不出错然后就WA到结束。
二分水题不多讲了。
#include <cstdio>#include <iostream>#include <string>#include <algorithm>#include <map>#include <cstring>#include <set>#include <vector>#include <cmath>using namespace std;const int maxn = 10000 + 5;double arr[maxn];int n,k;void solve(){ double l=0, r=999999; double mid; int sum; for(int t=0; t<=100; t++) { mid = (l+r)/2; sum = 0; for(int i=1; i<=n; i++) sum += (int)(arr[i]/mid); if(sum >= k) l = mid; else r = mid; } printf("%.2lf\n",floor(r*100)/100);}int main(){ while(scanf("%d%d",&n,&k)!=EOF && n && k) { memset(arr,0,sizeof(arr)); for(int i=1; i<=n; i++) scanf("%lf",&arr[i]); solve(); }}
poj 3616 应该是一个最长上升子序的题,但是不太会dp看过这个类型的题导致我也写不出。
dp[i]表示第i个时间段的最大值,然后状态转移为前i个每个最大中满足条件就加到第i个上去。同时更新最大。
#include <cstdio>#include <iostream>#include <string>#include <algorithm>#include <map>#include <cstring>#include <set>#include <vector>#include <cmath>using namespace std;const int maxn = 1000 + 5;struct node{ int l; int r; int eff;};node fck[maxn];bool cmp(node p, node q){ if(p.l == q.l) return p.r < q.r; return p.l < q.l;}long long dp[maxn];int main(){ int n,m,R; while(scanf("%d%d%d",&n,&m,&R)!=EOF && n && m && R) { long long ans = 0; for(int i=0; i<m; i++) { scanf("%d%d%d",&fck[i].l,&fck[i].r,&fck[i].eff); } memset(dp,0,sizeof(dp)); sort(fck,fck+m,cmp); for(int i=0; i<m; i++) { dp[i] = fck[i].eff; for(int j=0; j<i; j++) { if(fck[i].l >= fck[j].r + R) { dp[i] = max(dp[i],dp[j]+fck[i].eff); } } ans = max(ans,dp[i]); } printf("%d\n",ans); }}
poj3041这个是纯二分图匹配的模板题,这就暴露了我一个毛病就是看不出类型不会模板。。。多努力啊
题解:将x轴,y轴每一个点看成二分图两侧,input中的每一组数据就是表明左右两侧连一条线,即找到最大匹配数。
#include <cstdio>#include <iostream>#include <string>#include <algorithm>#include <map>#include <cstring>#include <set>#include <vector>using namespace std;const int maxn = 500 + 5;int maps[maxn][maxn];bool vis[maxn];int link[maxn];int n,k;int dfs(int t){ for(int i=1; i<=n; i++) { if(vis[i] == false && maps[t][i]) { vis[i] = true; if(link[i] == 0 || dfs(link[i])) { link[i] = t; return 1; } } } return 0;}int main(){ while(scanf("%d%d",&n,&k)!=EOF && n && k) { int x,y; memset(maps,0,sizeof(maps)); for(int i=0; i<k; i++) { scanf("%d%d",&x,&y); maps[x][y] = 1; } memset(link,0,sizeof(link)); int num = 0; for(int i=1; i<=n; i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) num++; } printf("%d\n",num); }}
阅读全文
0 0
- (个人训练赛) poj1064 poj3616 poj3041
- poj3616(dp)
- poj3616
- poj3616
- POJ3616
- poj3616
- poj3616
- poj3616
- poj1064
- poj1064
- POJ1064
- POJ1064
- 第二场个人训练赛(水题合集)
- 个人训练赛#3
- poj3041
- poj3041
- poj3041
- poj3041
- STL中stack(栈)的用法
- 51nod 1135 原根 (数论)
- STAR法则
- debian8.8访问win7共享文件夹
- alsa用户空间编程
- (个人训练赛) poj1064 poj3616 poj3041
- 解决windows安装jekyll时的问题
- C6678多核DSP开发——imglib应用之边缘检测
- 关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别
- 0519 G2n#W2A-B 盐水的故事
- 【React Native系列教程】Mac(OSX)平台搭建React Native开发环境
- 自定义仿Viewpager
- JNI开发之JNI实践
- Shell脚本基础1-先清楚几个概念