iT邦幫忙

0

算法题,编程语言不限,c,java,py

您是一個神仙,但您很喜歡采藥。

您有一個神奇的背包,背包內有VV個格子。

您所在的空間內有一些藥,每個藥會佔用11或22個格子。

每天可以進行一次如下操作:

採摘一個藥材放入背包中,若此時背包中沒有多餘的格子來放入新的藥材,可以先將背包中的若干藥材扔出去,至於扔多少以及扔幾個,全都由您决定。當然您也可以選擇不去進行採摘操作。

每一天結束前,神奇背包中的每個藥材都會產生一個藥丸。

作為神仙,您知道每天您可以採摘的藥材類型(即佔用格子數目),注意,當天的藥材如果不採摘,在第二天就會消失(當天藥材僅限當天採摘)。

為了獲得盡可能多的藥丸,請您計算最終能獲得的藥丸數目最多是多少?

看更多先前的討論...收起先前的討論...
神仙還需要算數學?那就不是神仙了 XD
神仙沒有四次元空間百寶袋?
淺水員 iT邦大師 6 級 ‧ 2021-03-17 13:32:24 檢舉
能搶其他人的袋子嗎?小說好像都這樣寫...
看不懂
這篇的問題就是:您是一個神仙 ...
正解就是:神仙不用算數學,直接變出來
結案 !很好懂的 XD
演算法的事,可以掰出一本論文出來,絕對比博士的論文還精彩
微笑 iT邦研究生 5 級 ‧ 2021-03-17 16:15:25 檢舉
藥材跟藥的定義模糊
可以不採摘那我可不可以不寫演算法(x
newkevin iT邦高手 1 級 ‧ 2021-03-19 08:00:40 檢舉
感覺是電玩
限時任務
會用地的東東
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2021-03-17 17:06:48
#include <iostream>
#include <cstring>

using namespace std;
long long ans, cnt1, cnt2, V, n;
char s[100010];

int main()
{

  cin >> V >> s;
  n = strlen(s);

  for(int i= 0; i < n; i++)
  {
      if(s[i] == '2'){
          if(cnt1 + 2 * cnt2 + 2 <= V) cnt2++;
    }else
    {
        //s[i] = 1;
      if(cnt1 + 2 * cnt2 + 1 <= V) cnt1++;
      else if(cnt2>0) cnt2 --, cnt1++;
    }
    ans += cnt2+cnt1;
  }

     cout << ans << endl;

  return 0;
}

C++資料來源

public static void main(String[] args) {
    int num =1 ;
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    String s = scanner.nextLine();

    int dayNum = 0;
    int totalNum = 0;
    int[] a = new int[s.length()];
    int number = 0;//背包现有药材占的份额
    for(int i = 1 ;i < s.length();i++) {
        int value = s.charAt(i) -48;
        int c = number + value;
            if (c <= n) {
                number += value;
                a[i] = value;
                dayNum++;
                totalNum += dayNum;
            }
            if (c > n && value == 1) {
                boolean flag = true;
                for (int j = 0; j < a.length; j++) {
                    if (a[j] == 2) {
                        a[j] = 1;
                        number = number-1;
                        flag = false;
                        totalNum += dayNum;
                        break;
                    }
                }
                if(flag)
                totalNum += dayNum;
            }
            if(value == 2 &&c > n){
                totalNum += dayNum;
            }

        }
    System.out.println(totalNum);
    }

java 資料來源

我要發表回答

立即登入回答