1 条题解

  • 0
    @ 2023-6-11 12:17:12

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    //p:存放数组的坐标及坐标对应的花生数量 
    int m,n,k,a[30][30],p[1000][3];
    
    int main(){
    	int i,j,s = 0;
    	//读入数据 
    	cin>>m>>n>>k;
    	for(i = 1;i <= m;i++){
    		for(j = 1;j <= n;j++){
    			cin>>a[i][j];
    			if(a[i][j] > 0){
    				p[s][0] = i;
    				p[s][1] = j;
    				p[s][2] = a[i][j];
    				s++;
    			}
    		}
    	}	
    	
    	//对p数组按照花生数量由大到小排序
    	for(i = 1;i < s;i++){
    		for(j = 0;j <= s - i - 1;j++){
    			if(p[j][2] < p[j+1][2]){
    				swap(p[j],p[j+1]);
    			}
    		}
    	} 
    	
    	//统计时间和摘到的花生数量
    	int time = 0;
    	int sum = 0;
    	//遍历每个花生点
    	for(i = 0;i < s;i++){
    		//如果是第一个花生点
    		if(i == 0){
    			if(p[i][0] + 1 + p[i][0] <= k){
    				time = p[i][0] + 1;
    				sum = sum + p[i][2];
    			}else{
    				break;
    			}
    		}else{
    			if(time + abs(p[i][0]-p[i-1][0]) + abs(p[i][1]-p[i-1][1]) + 1 + p[i][0] <= k){
    				time = time + abs(p[i][0]-p[i-1][0]) + abs(p[i][1]-p[i-1][1]) + 1;
    				sum = sum + p[i][2];
    			}else{
    				break;
    			}
    		} 
    	} 
    	
    	cout<<sum<<endl;
    }
    
    
    
    • 1

    信息

    ID
    2402
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者