6 条题解
-
2
using namespace std; struct node{ int x,y; int sum; } a[500]; bool cmp(node x,node y){ return x.sum>y.sum; } int n,m,k,x,ans; int main(){ cin>>n>>m>>k; int s=0; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { cin>>x; s++; a[s].x=i; a[s].y=j; a[s].sum=x; } sort(a+1,a+1+s,cmp); int t=1,sx=0; int sy=a[t].y; while(k>=abs(a[t].x-sx)+abs(a[t].y-sy)+1+a[t].x) { ans+=a[t].sum; k=k-(abs(a[t].x-sx)+abs(a[t].y-sy)+1); sx=a[t].x; sy=a[t].y; t++; } cout<<ans; return 0; }
-
1
声明:本题洛谷有原题,想C的去C题解。
怕你们说题解代码和我一样结构体+排序+模拟
结构体
struct T { int i;//记录行位置 int j;//记录列位置 int num;//该位置花生数量 } ;
排序,按照花生的数量的大小递减
bool cmp(T a, T b){ return a.num>b.num; }
模拟
- 用 记录前一次采摘位置,用于计算位移
- 先减去到路边和回路上的消耗 k -=2
- 第一棵只要减去横坐标即可 k -=(位移i - 1+采摘 1)
- 第i棵(i>=2)要减去位移和采摘时间 k -= (位移)-(采摘)
$k -= abs(peanut[i].i - pre_i)+abs(peanut[i].j - pre_j)+1;$
- 判断如果采摘了该棵能否回到路边
- 优化,不能回到路边或者花生数量为0时跳出循环
-
0
#include <bits/stdc++.h> using namespace std; int n,m,k,a[1000][1000],c[1000],d[1000],w,s; struct node{ int x,y,z; }b[1000]; bool cmp(node h,node l){ return h.x>l.x; } int main() { cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ if(a[i][j]>=0){ b[++w].x=a[i][j]; b[w].y=i; b[w].z=j; } } sort(b+1,b+w+1,cmp); c[1]=1+b[1].y*2; d[1]=1+b[1].y; for(int i=2;i<=w;i++){ d[i]=1+abs(b[i].y-b[i-1].y)+abs(b[i].z-b[i-1].z); c[i]=d[i]+b[i].y; } for(int i=1;i<=w;i++){ if(k<c[i])break; s+=b[i].x; k-=d[i]; } cout<<s; return 0; }
-
-2
#include<bits/stdc++.h> using namespace std; int x,ans,sum,m,n,k,cnt,t; struct Node { int x,y; int num; }a[450]; bool cmp(Node p,Node q) { return p.num>q.num; } int main() { cin>>m>>n>>k; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { cin>>x; if(x>0){ cnt++; a[cnt].num=x; a[cnt].x=i; a[cnt].y=j; } } } sort(a+1,a+cnt+1,cmp); sum=1+a[1].x; if(sum+a[1].x<=k) ans=ans+a[1].num; else { cout<<0; return 0; } for(int i=2;i<=cnt;i++) { sum=sum+1+abs(a[i-1].x-a[i].x)+abs(a[i-1].y-a[i].y); if(sum+a[i].x<=k) ans=ans+a[i].num; else break; } cout<<ans<<endl; return 0; }
-
-3
自己看代码(对于xxs们)
#include <bits/stdc++.h> using namespace std; struct shen { int x,y; int sum; } a[500]; bool cmp (shen x,shen y) {return x.sum>y.sum;} int n,m,k; int x; int ans; int main() { cin>>n>>m>>k; int s=0; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { cin>>x; s++; a[s].x=i; a[s].y=j; a[s].sum=x; } sort (a+1,a+1+s,cmp); int t=1,sx=0; int sy=a[t].y; while (k>=abs (a[t].x-sx)+abs (a[t].y-sy)+1+a[t].x) { ans+=a[t].sum; k=k-(abs (a[t].x-sx)+abs (a[t].y-sy)+1); sx=a[t].x; sy=a[t].y; t++; } cout<<ans; return 0; }
- 1
信息
- ID
- 160
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 278
- 已通过
- 93
- 上传者