貪心演算法--危險的實驗
> 問題 A: 危險的實驗
時間限制: 1 Sec 記憶體限制: 128 MB
[提交] [狀態]
題目描述
小明最近在上化學課,他需要使用到 n 種化學物質來進行他的實驗。在做實驗的時候, 他需要將所有化學物質放在桌面上,按次序排成一條直線。
然而每一種化學物質都是危險品,對於第 i 個化學物質,如果有另外一個化學物質距離 它的距離小於 ai,那麼就會發生爆炸。
小明想知道如果要安全的完成他的實驗,桌子最短可以多短。
輸入
第一行一個整數 n,表示化學物質的個數。
第二行有 n 個整數,第 i 個整數 ai 表示第 i 個化學物質必須與其他化學物質保持的距離。
輸出
輸出一行,包括一個整數,表示能夠讓小明安全完成實驗的桌子最小長度。
樣例輸入 Copy
3
3 1 2
樣例輸出 Copy
5
提示
20%的資料,1<=n<=20
50%的資料,1<=n<=100000
100%的資料,1<=n<=1000000,1<=ai<=100000
問題:注意陣列要開的足夠大,而且要解決max引用的方法
#include<iostream> #include<algorithm> using namespace std; int main() { long n,i,sum=0; long a[1000001]; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n-1;i++) { sum+=max(a[i+1],a[i]); } cout<<sum<<endl; return 0; }
這裡的:VC6編譯錯誤: error C2065: 'max' : undeclared identifier.
解決:
增加一句
#define max(a, b) (((a) > (b)) ? (a) : (b))
#include<iostream> #include<assert.h> #include<cmath> #include<algorithm> using namespace std; #define max(a, b) (((a) > (b)) ? (a) : (b)) int main() { long n,i,sum=0; long a[1000001]; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n-1;i++) { sum+=max(a[i+1],a[i]); } cout<<sum<<endl; return 0; }
再執行就解決了
下面是long 的相關知識
1.
long long 和 unsigned long long 是 C99 特有的。
2.
unsigned int 0~4294967295
int -2147483648~2147483647
unsigned long 0~4294967295
long -2147483648~2147483647
long long:-9223372036854775808~9223372036854775807