zzulioj新生周賽(6) 2733: 鍵盤霸主hrs

我也不想寫bug啊發表於2020-12-09

題目描述

眾所周知,hrs學長實力強悍,就沒有我hrs不會的題。打比賽的時候經常佔著鍵盤不下來。
隊友第一次來借鍵盤:hrs:“等會兒,這道題我快A了”。
幾分鐘過後,隊友第二次來借鍵盤:hrs:“慌啥,剛剛題意弄錯了,我改下”。
十分鐘過後,隊友又來催了,hrs:“你在教我做事”

。。。。。。
幾分鐘後,hrs學長極不情願地離開他心愛的鍵盤。
隊友成功地摸到了鍵盤,看著手下熟悉而又陌生的鍵盤,隊友一時間竟不知道該做些什麼。就在這時,hrs的聲音響起。“給你10分鐘寫這題,寫不完就換我來”,hrs學長太強了,隊友苦思冥想兩個小時的題,對hrs來說,不過是一眼題罷了。
什麼,你說前面有道題說hrs很菜,一眼看不出來。→_→,那道題是他自己出的,那叫謙虛,懂?
啥,你還覺得hrs學長是個cj。
這樣,來看看hrs學長的一眼題。
這裡有n個小球,每個小球都有一個隨機編號。你可以執行以下操作。
從這n個小球挑選出幾個小球,將這些小球上面的編號相加,這樣我們就得到了一個數字。
令mi為無法通過以上操作得到的最小正整數,輸出mi-1。

輸入

第一行一個數字T,表示T組測試資料。(0<T≤10)
每組資料有兩行輸入。
第一行一個整數n,表示小球的個數。(1≤n≤ 10)
第二行n個整數a1,a2,a3,…,an(1≤i≤n,0<ai≤1000),表示小球上面的編號。

輸出

輸出每組資料的mi-1

樣例輸出

6
0
3

提示

樣例解釋:
[1 2 3]
1:1
2:2
3:3
4:1+3
5:2+3
6:1+2+3
7:無法得到。mi=7
輸出mi-1=6
[3 3 3]
1:無法得到。mi=1
輸出mi -1=0
[1 1 1]
1:1
2:1+1
3:1+1+1
4:無法得到,mi=4
輸出mi-1=3

標程

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int n,a[15],b[100005]={0};b[0]=1;
		scanf("%d",&n);
		for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
		for(int i=0;i<n;i++)
		{
			for(int j=10000;j>=0;j--)  //注意這裡不可以從0開始到10000結束
			{
				if(b[j]==1)
				{
					b[j+a[i]]=1;
				}
			}
		}
		for(int i=0;i<10000;i++)
		{
			if(b[i]==0)
			{
				printf("%d\n",i-1);
				break;
			}
		}
	}
} 

相關文章