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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nyoj1204

發布時間:2025/3/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj1204 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

魔法少女
時間限制:1000 ms | 內存限制:65535 KB
難度:3
描述
前些時間虛淵玄的巨獻小圓著實火了一把。 在黑長直(小炎)往上爬樓去對抗魔女之夜時,她遇到了一個問題想請你幫忙。 因為魔女之夜是懸浮在半空的,所以她必須要爬樓,而那座廢墟一共有n層,而且每層高度不同,這造成小炎爬每層的時間也不同。不過當然,小炎會時間魔法,可以瞬間飛過一層或者兩層[即不耗時]。但每次瞬移的時候她都必須要至少往上再爬一層(在這個當兒補充魔力)才能再次使用瞬移。爬每單位高度需要消耗小炎1秒時間。 消滅魔女之夜是刻不容緩的,所以小炎想找你幫她找出一種最短時間方案能通往樓頂。
輸入
本題有多組數據,以文件輸入結尾結束。
每組數據第一行一個數字N(1 <= N <= 10000),代表樓層數量。
接下去N行,每行一個數字H(1 <= H <= 100),代表本層的高度。
輸出
對于每組數據,輸出一行,一個數字S,代表通往樓頂所需的最短時間。
樣例輸入
5
3
5
1
8
4
樣例輸出
1

WA(始終沒想通錯在哪里。。。):

#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int maxn = 10010; const int inf = 65535; int n,H[maxn]; int dp[maxn][3];//dp[i][0]表示爬到第i樓;dp[i][1]表示飛過一層到i樓;dp[i][2]表示飛過兩層到i樓int main() { while(scanf("%d",&n)!=EOF) { for(int i = 1; i <= n; i++) scanf("%d",&H[i]); dp[0][0] = 0; dp[1][0] = H[1]; dp[1][1] = 0; dp[1][2] = inf; dp[2][0] = min(dp[1][0]+H[2],dp[1][1]+H[2]); dp[2][1] = H[2]; dp[2][2] = 0; if(n == 3) { printf("%d\n",min(H[1],min(H[2],H[3]))); continue; } for(int i = 3; i <= n; i++) { dp[i][0] = min(dp[i-1][0],dp[i-1][2]) + H[i]; if(dp[i-1][1] != dp[i-2][1]) //判斷狀態是否可行,即保證只能夠連續飛兩層 dp[i][0] = min(dp[i][0],dp[i-1][1]+H[i]); dp[i][1] = dp[i-1][0]; //同上 if(dp[i-1][1] != dp[i-2][1]) dp[i][1] = min(dp[i][1],dp[i-1][1]); dp[i][2] = dp[i-2][0]; } printf("%d\n",min(dp[n][0],min(dp[n][1],dp[n][2]))); } return 0; }

AC(別人的代碼):

#include<bits/stdc++.h> using namespace std; const int maxn = 10005; int dp[maxn][2]; int a[maxn]; int main() {int n ;while(scanf("%d",&n)!=EOF){memset(dp,0,sizeof(dp));for( int i = 1; i <= n; i++){scanf("%d", &a[i]);}dp[1][0]=0;dp[2][0]=0;dp[2][1]=a[2];dp[1][1]=a[1];for(int i = 3; i <= n; i++){dp[i][0] = min(dp[i-2][1],dp[i-1][1]);dp[i][1] = min(dp[i-2][0]+a[i-1]+a[i],min(dp[i-1][0]+a[i],min(dp[i-2][1]+a[i],dp[i-1][1]+a[i])));}printf("%d\n",min(dp[n][0],dp[n][1]));}return 0; }

總結

以上是生活随笔為你收集整理的nyoj1204的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。