1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<iostream>
using namespace std;
int main(){
	int h,w; 
	cin>>h>>w;
	int sciana=h*w;
    int obrazy; 
	cin>>obrazy;
    int tab[obrazy];
    int T[sciana+1];                
	T[0] = 0;                             
	for(int i=1;i<=sciana;i++) {                  
    	T[i]=1000;                    
	}
    for(int i=0; i<obrazy; i++) {
    	int x;
    	cin>>x;
    	x=x*x;
		tab[i]=x;
	}
	for (int i=0;i<obrazy;i++) {                  
    	for (int j=0;j<=sciana-tab[i];j++) {        
        	if (T[j] < 1000) {        
            	if (T[j]+1 < T[j+tab[i]]) {    
            	    T[j+tab[i]] = T[j]+1;      
        	    }
    	    }
    	}
	}
	if(T[sciana]!=1000){
		cout<<T[sciana];
	}
	else{
		cout<<-1;
	}
    return 0;
}