Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
70周年校庆当天的1A留念。无穷背包+多重背包(记录使用状态,非0-1拆解,非双端队列)见代码~#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int oo = 0x3f3f3f3f; int N, T; int V[100], C[100]; int dp1[125 * 125]; int dp2[10005 + 125 * 125]; int used[10005 + 125 * 125]; int main(){ scanf("%d %d", &N, &T); int max_val = -1; for(int i =0; i < N; i ++){ scanf("%d", V + i); max_val = max(max_val, V[i]); } for(int i =0; i < N; i ++){ scanf("%d", C + i); } memset(dp1, oo, sizeof(dp1)); dp1[0] = 0; for(int i =0; i < N; i ++){ for(int j = V[i]; j <= max_val * max_val; j ++){ dp1[j] = min(dp1[j], dp1[j - V[i]] + 1); } } memset(dp2, oo, sizeof(dp2)); dp2[0] = 0; for(int i = 0; i < N; i ++){ memset(used, 0, sizeof(used)); for(int j = V[i]; j <= T + max_val * max_val; j ++){ if(used[j - V[i]] < C[i]){ int t = dp2[j - V[i]] + 1; if(dp2[j] > t){ dp2[j] = t; used[j] = used[j - V[i]] + 1; } } } } int res = oo; for(int i = T; i <= T + max_val * max_val; i ++){ int t = dp2[i] + dp1[i - T]; res = min(res, t); } if(res == oo){ printf("-1"); } else { printf("%d", res); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator