• 数学(动态规划,GCD):COGS 469. [NOI2010]能量采集


    能量采集

    ★★☆   输入文件:energy2010.in   输出文件:energy2010.out   简单对比
    时间限制:1 s   内存限制:512 MB

    【问题描述】

      栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量。在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起。

    栋栋的植物种得非常整齐,一共有n列,每列有m棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范围是1至n,表示是在第x列,y的范围是1至m,表示是在第x列的第y棵。

    由于能量汇集机器较大,不便移动,栋栋将它放在了一个角上,坐标正好是(0, 0)。

    能量汇集机器在汇集的过程中有一定的能量损失。如果一棵植物与能量汇集机器连接而成的线段上有k棵植物,则能 量的损失为2k + 1。例如,当能量汇集机器收集坐标为(2, 4)的植物时,由于连接线段上存在一棵植物(1, 2),会产生3的能量损失。注意,如果一棵植物与能量汇集机器连接的线段上没有植物,则能量损失为1。现在要计算总的能量损失。

    下面给出了一个能量采集的例子,其中n = 5,m = 4,一共有20棵植物,在每棵植物上标明了能量汇集机器收集它的能量时产生的能量损失。

     

      在这个例子中,总共产生了36的能量损失。

     


     


    【输入格式】

      仅包含一行,为两个整数n和m。

    【输出格式】

      仅包含一个整数,表示总共产生的能量损失。

    【样例输入1】

      5 4

    【样例输出1】

      36

    【样例输入2】

      3 4

    【样例输出2】

      20

    【数据规模和约定】

    对于10%的数据:1 ≤ n, m ≤ 10;

    对于50%的数据:1 ≤ n, m ≤ 100;

    对于80%的数据:1 ≤ n, m ≤ 1000;

    对于90%的数据:1 ≤ n, m ≤ 10,000;

    对于100%的数据:1 ≤ n, m ≤ 100,000。

      

      这道题要求sigma 2×(GCD(i,j)-1)+1(0<i<=n,0<j<=m)

      换个计数方式,我们记录GCD(a,b)为i的(a,b)有多少对,一个简单的DP就解决了~~~

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 const int maxn=100010;
     6 long long f[maxn];
     7 long long ans;
     8 int main(){
     9     freopen("energy2010.in","r",stdin);
    10     freopen("energy2010.out","w",stdout);
    11     int n,m;
    12     scanf("%d%d",&n,&m);
    13     if(n>m)swap(n,m);
    14     for(int i=n;i>=1;i--){
    15         f[i]=1ll*(m/i)*(n/i);    
    16         for(int j=2*i;j<=n;j+=i)
    17             f[i]-=f[j];
    18     }
    19     for(int i=1;i<=n;i++)
    20         ans+=f[i]*(2*(i)-1);
    21     printf("%lld
    ",ans);
    22     return 0;
    23 }

      

    尽最大的努力,做最好的自己!
  • 相关阅读:
    SQL 死锁
    【Redis】存入redis的值,莫名其妙多了很多“u0000”
    for循环里面使用task
    Idea---SpringBoot整合Mybatis问题整理
    到相对应的元素位置。
    npm安装任何包都报错的解决办法
    form表单提交和ajax提交的使用场景和差别
    computed计算属性以及与watch的区别
    了解js的宏任务(macrotask)和微任务(microtask)以及Event-Loop
    async/await,promise的优缺点
  • 原文地址:https://www.cnblogs.com/TenderRun/p/5316575.html
Copyright © 2020-2023  润新知