• 数学(动态规划,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 }

      

    尽最大的努力,做最好的自己!
  • 相关阅读:
    vue开发chrome扩展,数据通过storage对象获取
    Vue手动集成less预编译器
    Google Translate寻找之旅
    Javascript Range对象的学习
    Javascript Promises学习
    SublimeText 建立构建Node js系统
    We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.
    npm安装包出现UNMET DEPENDENCY报错
    (转载)命令行说明中格式 尖括号 中括号的含义
    Linux重启网卡服务Failed to start LSB: Bring up/down networking.
  • 原文地址:https://www.cnblogs.com/TenderRun/p/5316575.html
Copyright © 2020-2023  润新知