[NOIP2009 普及组] 道路游戏

[NOIP2009 普及组] 道路游戏,第1张

[NOIP2009 普及组] 道路游戏

这个题有点过于生艹了,好不容易想出前缀和来,前缀和里还有大坑
题链

sum[a][b]=sum[a][b-1]+jb[(a+b-1)%n][b];

sum[a][b]表示一个机器人以 工厂a 为起点,从第一秒走到第 b 秒拾到的金币
但是 sum[k][i]-sum[k][j]表示的却不是以k为起点,
sum[k][i]-sum[k][j]表示的是以k+j 为起点的 从第 j+1 秒到第 i 秒捡到的所有金币,
因为当第一秒的起点固定时,随着时间的推移,时间也变了,位置也变了
简直是自找麻烦

#include
#include
#include
#define ll long long
#define go(i,a,b) for(int i=a;i<=b;++i)
#define max(a,b) (a>b?a:b)
#define min(a,b) (a>n>>m>>p;

go(i,0,n-1)
    go(j,1,m){scanf("%d",&jb[i][j]);}
go(i,0,n-1)scanf("%d",&cost[i]);
go(i,0,n-1){
    go(j,1,m){
        sum[i][j]=sum[i][j-1]+jb[(i+j-1)%n][j];
        //printf("%d %d: %dn ",i,j,sum[i][j]);
    }
//printf("n");
    }



//cout<<666;
f();


return 0;
}

再来看看别人的代码,过于生艹了,确实明白自己是有多自找麻烦了

# include
# include
using namespace std;
int n,m,p;
int pay[1001];
int money[1001][1001];
int f[1001];
int main()
{
    cin>>n>>m>>p;
    memset(f,-999999,sizeof(f));
    f[0]=0;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
        cin>>money[i][j];
    for(int i=1;i<=n;i++)
      cin>>pay[i];
    for(int i=1;i<=m;i++)
      for(int j=1;j<=n;j++)
        {
            int ff=j-1;
            if(!ff) ff=n;
            int ss=money[ff][i];
            for(int k=1;k<=p;k++)
              {
                  if(i-k<0) break;
                  f[i]=max(f[i],f[i-k]+ss-pay[ff]);
                  ff--;
                  if(!ff) ff=n;
                  ss+=money[ff][i-k];
              }
        }
    cout<					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5659422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存