培訓貪心題解

2021-09-13 11:02:51 字數 2612 閱讀 3026

在第乙個城市加滿,之後每到乙個城市加一公升油,直到滿足最低油耗量。注意有可能在第乙個城市就超過最低油耗量。

#include using namespace std;

int main ()

使用k次最大值的表情,再使用一次第二大值的表情,迴圈直到m次。

#include using namespace std;

long long a[200004];

int main ()

long long ans=0;

sort(a,a+n);

long long max1=a[n-1];

long long max2=a[n-2];

ans+=m/(k+1)*(k*max1+max2);//把m分為長度為(k+1)的組

ans+=m%(k+1)*max1;//剩餘的

printf("%lld\n",ans);

}

列舉劃單人船的兩個人,其餘的排序後依次上船即可

#include using namespace std;

int a[104];

int main ()

sort(a+1,a+1+2*n);

int ans=1e9;

for (int i = 1; i <= 2*n; ++i)

ans=min(ans,sum);}}

printf("%d\n",ans);

}

先把綠葡萄給andrew,如果不夠的話輸出no,夠的話綠葡萄減去x個。

再把綠葡萄和紫葡萄給dmitry,同上。

最後把所有葡萄給michal,同上。

#include using namespace std;

int main()

if(a+b排序,然後從小到大遍歷即可。

#include "bits/stdc++.h"

using namespace std;

int a[100005];

int main()

sort(a,a+n);

int ans=0;

for (int i = 0; i < n; ++i)

printf("%d\n",ans);

}}

每個值出現兩次,即每個值對應兩個下標,因為必須按照1-n的順序走,那麼每次選擇對後面的結果都沒有影響。對於每種蛋糕店只有兩種方案,每次取最小值即可。詳見注釋。

#include "bits/stdc++.h"

using namespace std;

int a[200004];//用來記錄蛋糕店的下標

int b[200004];

int main()

}long long ans=0;

a[0]=1,b[0]=1;//初始位置是1

for (int i = 1; i <= n; ++i)

printf("%lld\n",ans);

}

找連續相等的部分,然後然後與上乙個連續相等的部分組合,求乙個max即可。

#includeusing namespace std;

int a[100004];

int main()

int ans=0;

int laslen=0;//上乙個連續相等的部分

int nowlen=1;//現在連續相等的部分

for (int i = 2; i <= n+1; ++i)

}printf("%d\n",ans*2);

}

樸素的想法,想要將a[i]前移,首先看能否和a[i-1]交換,若不行,再看a[i-2]與a[i-1],若a[i-2]能同時與a[i-1]和a[i]交換,那麼能將a[i-2]移到a[i]後面,a[i-1]和a[i]整體前移一位。

考慮普遍的情況,對於i到j,如果a[i]到a[j],都可以和a[i-1]交換,那麼就可以將a[i-1]移到a[j]的後面,將a[i]到a[j]整體前移一位。

然而暴力求交集是不可行的,我們可以從v到u建單向邊,用乙個num[x]陣列,表示x後面與x有邊的點的數量,因為位移是整體前移,所以每個點對前面的貢獻不會消失。

當num[x]=x到i的距離時,可以將x移到i後面,並且x不對前面的點有貢獻。

整體複雜度o(n+m)    詳見注釋

#include using namespace std;

int a[300004];

int num[300004];//記錄num[a[i]]後面的人可以和a[i]交換的人的個數

vectorv[300004];//v[i]維護能與i交換的點

int main ()

int x,y;

while(m--)

memset(num,0, sizeof(num));

for (int i = 0; i < v[a[n]].size(); ++i)

int ans=0;

for (int i = n-1; i >=1 ; --i) }}

printf("%d\n",ans);

}

題解 辯論 貪心

看到這道題我秒想了網路流,搞了下沒出來,發現是個簡單的貪心,不難想。設a b a,ba,b表示支援議題1 11的人數和支援議題2 22的人數,沒選乙個就把對應的 1,1 1,1 1,1 author galaxy yr lang c created time 2019年10月24日 星期四 08時0...

貪心 ddl(題解)

題意 zjm 有 n 個作業,每個作業都有自己的 ddl,如果 zjm 沒有在 ddl 前做完這個作業,那麼老師會扣掉這個作業的全部平時分。所以 zjm 想知道如何安排做作業的順序,才能盡可能少扣一點分。思路 貪心的思想 因為每一項作業完成需要的時間相同,所以先完成分數多的扣的分越少,為了完成盡可能...

Crossing River 題解 貪心

t組資料 t 20 給你n個人 n 1000 過河,每個人都有權值,一條船,每次船最多運2個人,每次的花費為兩個人的較大花費 求所有人都過河需要的最小花費 經典的過河問題,記錄一下 先將權值從小到大排序一下 每次運兩個人顯然有兩種最優的方法 1 先運 a 1 a 2 過去,a 1 回來,再運 a n...