POJ 1701

  1 /*
  2 Every tenant went up N floors would make the dissatisfied degree rise N * a + 0.5 * N * (N - 1) degrees,
  3 every tenant went down N floors would make the dissatisfied degree rise N * b + 0.5 * N * (N - 1) degrees.
  4
  5   △= Dp+1 – Dp
  6 = ∑1=<i<=p Ki*(b+p-i)) - ∑p<i<=n Ki*(a+i-p-1)
  7 =  ∑1=<i<=n Ki * i +(b+p)*∑1=<i<=p Ki   -     (a-p-1)∑p<i<=n Ki
  8 */
  9
 10 #include <iostream>
 11 #define MAXN  10001
 12 using namespace std;
 13
 14 __int64 _m[MAXN+1];
 15 int k[MAXN+1];
 16 __int64 p_2[MAXN+1];
 17 __int64 p_3[MAXN+1];
 18 int k_1[MAXN];
 19 int k_2[MAXN];
 20
 21
 22 int main()
 23 {
 24     //freopen("acm.acm","r",stdin);
 25     int test;
 26     int n;
 27     int i;
 28     int j;
 29     int  p_1;
 30     int a;
 31     int b;
 32     scanf("%d",&test);
 33     while(test --)
 34     {
 35         scanf("%d",&n);
 36         scanf("%d",&a);
 37         scanf("%d",&b);
 38
 39         for(i = 1; i <= n; ++ i)
 40         {
 41             scanf("%d",&k[i]);
 42         }
 43
 44         for(i = 1; i <= n; ++ i)
 45         {
 46             k_1[i] = k_2[i] = k[i];
 47         }
 48
 49         for(i = n-1; i >=1; -- i)
 50         {
 51             k_2[i] += k_2[i+1];
 52         }
 53
 54         for(i = 2; i <= n; ++i)
 55         {
 56             k_1[i] += k_1[i-1];
 57         }
 58
 59         p_1 = 0;
 60         for(i = 1; i <= n; ++ i)
 61         {
 62             p_1 += k[i]*i;
 63         }
 64
 65         for(i = 1; i <= n; ++ i)
 66         {
 67             p_2[i] = (b + i)*k_1[i];
 68         }
 69
 70         for(i = 1; i <= n; ++ i)
 71         {
 72             k_2[i] -= k[i];
 73         }
 74
 75
 76         copy(k_2,k_2+n+1,p_3);
 77
 78         for(i = 1; i <= n; ++ i)
 79         {
 80             p_3[i] *= (a-i-1);
 81         }
 82         _m[1] = 0;
 83         for(i = 2; i <= n; ++ i)
 84         {
 85             _m[1] += (i-1)*a+((i-1)*(i-2)/2);
 86         }
 87
 88         for(i = 2; i <= n; ++ i)
 89         {
 90             _m[i] = _m[i-1] - p_1 + p_2[i-1] - p_3[i-1];
 91         }
 92
 93         __int64 min = 999999999999999;
 94
 95         int place;
 96
 97         for(i = 1; i <= n; ++ i)
 98         {
 99             if(_m[i] < min)
100             {
101                 min = _m[i];
102                 place = i;
103             }
104         }
105         cout<<place<<endl;
106     }
107 }
时间: 2024-11-05 17:27:34

POJ 1701的相关文章

POJ 3449 Geometric Shapes --计算几何,线段相交

题意: 给一些多边形或线段,输出与每一个多边形或线段的有哪一些多边形或线段. 解法: 想法不难,直接暴力将所有的图形处理成线段,然后暴力枚举,相交就加入其vector就行了.主要是代码有点麻烦,一步一步来吧. 还有收集了一个线段旋转的函数. Vector Rotate(Point P,Vector A,double rad){ //以P为基准点把向量A旋转rad return Vector(P.x+A.x*cos(rad)-A.y*sin(rad),P.y+A.x*sin(rad)+A.y*co

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京

转载:poj题目分类(侵删)

转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K–0.50K:中短代码:0.51K–1.00K:中等代码量:1.01K–2.00K:长代码:2.01K以上. 短:1147.1163.1922.2211.2215.2229.2232.2234.2242.2245.2262.2301.2309.2313.2334.2346.2348

poj题库分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ题目(转)

http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (

Poj 题目分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ题目分类(转)

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

北大POJ题库使用指南

原文地址:北大POJ题库使用指南 北大ACM题分类主流算法: 1.搜索 //回溯 2.DP(动态规划)//记忆化搜索 3.贪心 4.图论 //最短路径.最小生成树.网络流 5.数论 //组合数学(排列组合).递推关系.质因数法 6.计算几何 //凸壳.同等安置矩形的并的面积与周长.凸包计算问题 8.模拟 9.数据结构 //并查集.堆.树形结构 10.博弈论 11.CD有正气法题目分类: 1. 排序 1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1

POJ - 3186 Treats for the Cows (区间DP)

题目链接:http://poj.org/problem?id=3186 题意:给定一组序列,取n次,每次可以取序列最前面的数或最后面的数,第n次出来就乘n,然后求和的最大值. 题解:用dp[i][j]表示i~j区间和的最大值,然后根据这个状态可以从删前和删后转移过来,推出状态转移方程: dp[i][j]=max(dp[i+1][j]+value[i]*k,dp[i][j-1]+value[j]*k) 1 #include <iostream> 2 #include <algorithm&