BZOJ 1042 HAOI2008 硬幣購物

2022-05-01 05:42:10 字數 961 閱讀 7644

time limit: 10 sec  memory limit: 162 mb

submit: 2824  solved: 1735

[submit][status][discuss]硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s

i的價值的東西。請問每次有多少種付款方法。

第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s<=100000,tot<=1000

每次的方法數

1 2 5 10 2

3 2 3 1 10

1000 2 2 2 900427

用容斥原理,方案數=1,2,3,4號硬幣非法的方案數-1,2,3號硬幣非法的方案數-1,2,4號硬幣非法的方案數…+1,2號硬幣非法的方案數+1,3號硬幣非法的方案數+…-1號硬幣非法的方案數-2號硬幣非法的方案數-…。

(1,2,3號硬幣非法的方案中4是否非法不管)

先用揹包跑出0-s的方案數,然後0-(1<<4)列舉所有非法情況,對於二進位製上為1的硬幣,減去他(d[i]+1)*c[i]的價值,強制使它非法,然後剩餘的價值隨便,直接加上f[s-(d[k]+1)*c[k]]。

#include#include#include#include#include#define ll long long

using namespace std;

const int s=100005;

int tot,s;

int c[10],d[10];

ll ans;

ll f[s];

int main()

} int temp,cnt;

while(tot--)

} if(temp>=0)

} printf("%lld\n",ans);

} return 0;

}

BZOJ1042 HAOI2008 硬幣購物

description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買si的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s output 每次的方法...

bzoj1042 HAOI2008 硬幣購物

time limit 10 sec memory limit 162 mb submit 1835 solved 1074 submit status discuss 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西...

bzoj1042 HAOI2008 硬幣購物

description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s 1000...