• hdu1355


    题意:有一片矩形花生田在路的一侧,田上的整数坐标位置有0个或多个花生,现规定从路上走到田地最边上的某个格点位置、从田边上走回路上、从一个格点移动到另一个格点、采摘格点上的花生,这四种动作都要花费一单位的时间,每次必须采摘花生数最多的格点,给出限定时间,问能采多少花生。

    我一开始没有看见每次必须采摘花生数最多的格点,于是,我考虑了状压 DP 这种高端做法```本来又该满心欢喜地敲的时候发现样例并通不过```我百思不得其解后重新研读了一下题意才发现那个条件```于是```并不是高端的 DP 题,而是一道彻头彻尾的水题啊!只是模拟一下采花生的路线,反正路线肯定是从大到小固定的,然后就这样算每次的时间会不会超时,如果不超时就继续下一个点,如果超时了就输出上一个点的花生数。

    中间我还RE了两法,原因是我的c初始化位置放错,导致c在循环中一直增加最终越界```低级错误啊```

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #include<math.h>
     5 using namespace std;
     6 
     7 struct point{
     8     int x,y,n;
     9 }p[10000];
    10 
    11 int dp[10000],t[10000];
    12 
    13 int cmp(point p1,point p2){
    14     return p1.n>p2.n;
    15 }
    16 
    17 int main(){
    18     int T;
    19     while(scanf("%d",&T)!=EOF){
    20         int M,N,K;
    21         int i,j,k;
    22         for(int q=1;q<=T;q++){
    23             int c=0;
    24             memset(p,0,sizeof(p));
    25             memset(dp,0,sizeof(dp));
    26             memset(t,0,sizeof(t));
    27             scanf("%d%d%d",&M,&N,&K);
    28             for(i=1;i<=M;i++){
    29                 for(j=1;j<=N;j++){
    30                     int n;
    31                     scanf("%d",&n);
    32                     if(n){
    33                         c++;
    34                         p[c].x=i;
    35                         p[c].y=j;
    36                         p[c].n=n;
    37                     }
    38                 }
    39             }
    40             sort(p+1,p+c+1,cmp);
    41             for(i=1;i<=c;i++){
    42                 if(i==1)t[i]=p[i].x+1;
    43                 else t[i]=1+t[i-1]+abs(p[i].x-p[i-1].x)+abs(p[i].y-p[i-1].y);
    44                 if(t[i]+p[i].x>K)break;
    45                 else{
    46                     dp[i]=dp[i-1]+p[i].n;
    47                 }
    48             }
    49             printf("%d
    ",dp[i-1]);
    50         }
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    【转】每天一个linux命令(52):ifconfig命令
    【转】每天一个linux命令(51):lsof命令
    linux挂载SD卡
    【转】每天一个linux命令(50):crontab命令
    【转】每天一个linux命令(49):at命令
    【转】每天一个linux命令(48):watch命令
    【转】每天一个linux命令(47):iostat命令
    【转】每天一个linux命令(46):vmstat命令
    【转】每天一个linux命令(45):free 命令
    【转】每天一个linux命令(44):top命令
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4304604.html
Copyright © 2020-2023  润新知