陕西师范大学第七届程序设计竞赛 C题 iko和她的糖
生活随笔
收集整理的這篇文章主要介紹了
陕西师范大学第七届程序设计竞赛 C题 iko和她的糖
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鏈接:
https://www.nowcoder.com/acm/contest/121/C
來(lái)源:牛客網(wǎng)
時(shí)間限制:C/C++ 1秒,其他語(yǔ)言2秒
空間限制:C/C++ 131072K,其他語(yǔ)言262144K
64bit IO Format: %lld
來(lái)源:牛客網(wǎng)
時(shí)間限制:C/C++ 1秒,其他語(yǔ)言2秒
空間限制:C/C++ 131072K,其他語(yǔ)言262144K
64bit IO Format: %lld
題目描述
????iko超級(jí)超級(jí)喜歡吃糖,有一天iko想出去玩,她計(jì)劃從1點(diǎn)走到N點(diǎn)(按1,2,3,...,n的順序走),每個(gè)點(diǎn)都有一個(gè)補(bǔ)給站,第i點(diǎn)的補(bǔ)給站有a[i]顆糖,從i點(diǎn)走到i+1點(diǎn)會(huì)消耗掉b[i]顆糖,iko在出游的途中可以選擇三個(gè)補(bǔ)給站,iko想知道她走完全程到達(dá)N點(diǎn)時(shí)口袋里最多還能剩下幾顆糖(初始時(shí)iko的口袋里一顆糖都沒(méi)有)。
輸入描述:
第一行輸入N(3<=N<=1000) 第二行輸入N個(gè)數(shù)代表a[1].......a[N] (0<=a[i]<=1000 ) 第三行輸入N-1個(gè)數(shù)代表b[1]......b[N-1] ( 1<=b[i]<=1000 )輸出描述:
輸出一個(gè)數(shù)字表示iko到達(dá)n點(diǎn)時(shí)口袋里最多剩下的糖, 若不能到達(dá)N點(diǎn)輸出-1。示例1輸入
3 1 3 4 3 4輸出
-1示例2輸入
5 3 4 5 2 4 3 2 2 2輸出
3解法1:
深度優(yōu)先搜索 dfs
void dfs(int index,int sum,int cnt)
當(dāng)前處于第index個(gè)補(bǔ)給站,口袋里有sum顆糖,還可以選擇cnt個(gè)補(bǔ)給站
初始時(shí)iko的口袋里一顆糖都沒(méi)有,所以sum=0;
若sum<0,說(shuō)明無(wú)法到達(dá)下一個(gè)補(bǔ)給站
若當(dāng)前處于最后一個(gè)補(bǔ)給站,如果還有補(bǔ)給機(jī)會(huì),肯定要補(bǔ)給,如果沒(méi)有補(bǔ)給機(jī)會(huì),則不補(bǔ)給
解法2:
貪心
#include<bits/stdc++.h> using namespace std; const int maxn=1e3+5; int a[maxn];//補(bǔ)給 int b[maxn];//消耗 int n;//點(diǎn)的個(gè)數(shù) int sum;//最多還能剩下幾顆糖 int main() {ios::sync_with_stdio(0);while(cin>>n){priority_queue<int> q;//每次取出最大int first;//第一個(gè)補(bǔ)給站int cnt=0;//補(bǔ)給次數(shù)cin>>first;q.push(first);//必須取第一個(gè)for(int i=1;i<n;i++)cin>>a[i];for(int i=1;i<n;i++)cin>>b[i];for(int i=1;i<n;i++){while(sum<b[i]&&!q.empty()){sum+=q.top();q.pop();cnt++;}sum-=b[i];if(sum<0){cnt=100;break;}q.push(a[i]);}while(!q.empty()&&cnt<3){sum+=q.top();q.pop();cnt++;}cout<<(cnt>3?-1:sum)<<endl; }return 0; }總結(jié)
以上是生活随笔為你收集整理的陕西师范大学第七届程序设计竞赛 C题 iko和她的糖的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ZOJ3785 What day is
- 下一篇: HDU4809 Wow! Such Ci