演算法訓練 郵票

2021-09-11 11:54:59 字數 1351 閱讀 8006

題目鏈結

問題描述

給定乙個信封,有n(1≤n≤100)個位置可以貼郵票,每個位置只能貼一張郵票。我們現在有m(m<=100)種不同郵資的郵票,面值為x1,x2….xm分(xi是整數,1≤xi≤255),每種都有n張。

顯然,信封上能貼的郵資最小值是min(x1, x2, …, xm),最大值是 n*max(x1, x2, …,  xm)。由所有貼法得到的郵資值可形成乙個集合(集合中沒有重複數值),要求求出這個集合中是否存在從1到某個值的連續郵資序列,輸出這個序列的最大值。

例如,n=4,m=2,面值分別為4分,1分,於是形成1,2,3,4,5,6,7,8,9,10,12,13,16的序列,而從1開始的連續郵資序列為1,2,3,4,5,6,7,8,9,10,所以連續郵資序列的最大值為10分。

分析:用陣列vis記錄每一次貼上的郵票面值是否出現降低查詢時間複雜度。再用old記錄以前使用i個貼上位置生成的郵票值,再用陣列add記錄新生成的不在old的郵票值,每次生成結束再在old中新增add即可。

#include #include using namespace std;

const int m = 105, max = 25500+5;

int val[m];

bool vis[max];

int main(int argc, char *ar**)

if( !vis[1])

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

}

for(int j = 0; j < add.size(); j++)

old.push_back( add[j]);

add.clear();

} int ans = 1;

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

} cout<< ans<< "\n";

return 0;

}

輸入格式

第一行:最多允許貼上的郵票張數n;第二行:郵票種數m;第三行:空格隔開的m個數字,表示郵票的面值xi。注意:xi序列不一定是大小有序的!

輸出格式

從1開始的連續郵資序列的最大值max。若不存在從1分開始的序列(即輸入的郵票中沒有1分面額的郵票),則輸出0.

樣例輸入

樣例一:42

4 1樣例二:105

2 4 6 8 10

樣例輸出

樣例一:

10樣例二:

0

演算法訓練 郵票

問題描述 給定乙個信封,有n 1 n 100 個位置可以貼郵票,每個位置只能貼一張郵票。我們現在有m m 100 種不同郵資的郵票,面值為x1,x2 xm分 xi是整數,1 xi 255 每種都有n張。顯然,信封上能貼的郵資最小值是min x1,x2,xm 最大值是 n max x1,x2,xm 由...

演算法 動態規劃 郵票問題

題目描述 已知乙個 n 枚郵票的面值集合 如,和乙個上限 k 表示信封上能夠貼 k 張郵票。計算從 1 到 m 的最大連續可貼出的郵資。例如,假設有 1 分和 3 分的郵票 你最多可以貼 5 張郵票。很容易貼出 1 到 5 分的郵資 用 1 分郵票貼就行了 接下來的郵資也不難 6 3 3 7 3 3...

DL RBM訓練演算法

在學習hinton的stack autoencoder演算法 reducing the dimensionality of data with neural networks 之前需要了解什麼是rbm,現在就我學習的情況,查詢的資料 大部分來自部落格 簡單介紹一下rbm。當然,這裡面還有同組實驗的同...