日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

陕西师范大学第七届程序设计竞赛 C题 iko和她的糖

發(fā)布時(shí)間:2024/10/6 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 陕西师范大学第七届程序设计竞赛 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

題目描述

????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ǔ)給


//dfs #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 max_sum;//最多還能剩下幾顆糖 //index表示現(xiàn)在處于哪一個(gè)點(diǎn),sum表示剩下幾顆糖,可以選擇cnt個(gè)補(bǔ)給站 void dfs(int index,int sum,int cnt) {if(sum<0)return ;if(index==n){//如果還有剩余的補(bǔ)給機(jī)會(huì),肯定要補(bǔ)給,這樣才最多if(cnt>0&&sum+a[index]>max_sum)max_sum=sum+a[index];else if(cnt==0&&sum>max_sum)max_sum=sum;return ;}dfs(index+1,sum-b[index],cnt);//這一站不補(bǔ)給if(cnt>0)dfs(index+1,sum+a[index]-b[index],cnt-1);//這一站補(bǔ)給 } int main() {ios::sync_with_stdio(0);while(cin>>n){max_sum=-1;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<n;i++)cin>>b[i];dfs(1,0,3);//初始時(shí)iko的口袋里一顆糖都沒(méi)有cout<<max_sum<<endl; }return 0; }

解法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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。