Codeforces 139 B. Wallpaper
問題
n個の部屋があり、それぞれの幅、奥行き、高さが与えられる。
m種類の壁紙を使って、それぞれの部屋の壁に壁紙を貼る。
それぞれの壁紙の幅と長さと値段が与えられる。
壁紙は、横にだけつなげることができる。
一つの部屋は一種類の壁紙しか使えない。
一つの部屋で余った壁紙を他の部屋に使うことはできない。
使わない種類の壁紙があってもよい。
このとき、全ての部屋に壁紙を貼るのにかかる金額の最小値を求めよ。
制約条件
入力の整数≦500
方針
割り算で、それぞれの壁紙を使ったときに何枚必要を求め、一番安い壁紙を使っていく。
ソースコード
int n,m,a[500],b[500],c[500]; int d[500],e[500],f[500]; void run(){ cin>>n; rep(i,n)cin>>a[i]>>b[i]>>c[i]; cin>>m; rep(i,m)cin>>d[i]>>e[i]>>f[i]; int ans=0; rep(i,n){ int tmp=(int)1e9; rep(j,m){ int x=2*(a[i]+b[i]), y=d[j]/c[i]*e[j]; if(y<=0)continue; tmp=min(tmp,(x+y-1)/y*f[j]); } ans+=tmp; } cout<<ans<<endl; }