2 条题解

  • 0
    @ 2025-10-8 16:51:26
    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e3+5;
    int a[N][N], b[N], f[N];
    int main()
    {
        int n, m, p; scanf("%d%d%d", &n, &m, &p);
        for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d", &a[i][j]);
        for(int i=1; i<=n; i++) scanf("%d", &b[i]);
        memset(f, -63, sizeof(f)); f[0]=0;
        for(int i=1; i<=m; i++)
            for(int j=1; j<=n; j++)
            {
                int sum=f[i-1]-b[j];
                for(int k=0; k<p && i+k<=m; k++)
                {
                    int t=(j+k<=n)? j+k: (j+k-n);
                    sum+=a[t][i+k]; f[i+k]=max(f[i+k], sum);
                }
            }
        printf("%d\n", f[m]);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:51:19
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e3+5;
      int a[N][N], b[N], f[N];
      int main()
      {
      	int n, m, p; scanf("%d%d%d", &n, &m, &p);
      	for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d", &a[i][j]);
      	for(int i=1; i<=n; i++) scanf("%d", &b[i]);
      	memset(f, -63, sizeof(f)); f[0]=0;
      	for(int i=1; i<=m; i++)
      		for(int j=1; j<=n; j++)
      		{
      			int sum=f[i-1]-b[j];
      			for(int k=0; k<p && i+k<=m; k++)
      			{
      				int t=(j+k<=n)? j+k: (j+k-n);
      				sum+=a[t][i+k]; f[i+k]=max(f[i+k], sum);
      			}
      		}
      	printf("%d\n", f[m]);
      	return 0;
      } 
      • 1

      *【动态规划】道路游戏[NOIP普及组2009]

      信息

      ID
      658
      时间
      1000ms
      内存
      128MiB
      难度
      7
      标签
      递交数
      13
      已通过
      9
      上传者