Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- /// iterative dp
- int var[1005] , dpp[105][10005];
- int solve(int cur , int rem) /// cur = index of coin , rem = remaining value to make
- {
- if(rem < 0) return 0;
- if(cur > last ){
- if(rem == 0) return 1;
- else return 0;
- }
- int ans = solve(cur + 1 , rem) + solve(cur , rem - val[cur]);
- return ans;
- }
- int dpp[2][10005];
- int main()
- {
- int n , k;
- dpp[n+1][0] = 1;
- for(int i = 1 ; i <= k ; i++) dpp[n+1][i] = 0;
- for(int cur = n ; cur > 0 ; cur--){
- for(int rem = 0 ; rem <= k ; rem++){
- int ans = 0;
- ans = dpp[cur+1][rem];
- if(rem - val[cur] >= 0) ans += dpp[cur][rem - val[cur]];
- dpp[cur][rem] = ans;
- }
- }
- /// 0: cur, 1: cur+1
- dpp[0][0] = 1;
- for(int i = 1 ; i <= k ; i++) dpp[0][i] = 0;
- for(int cur = n ; cur > 0 ; cur--){
- for(int rem = 0 ; rem <= k ; rem++) dpp[1][rem] = dpp[0][rem];
- for(int rem = 0 ; rem <= k ; rem++){
- int ans = 0;
- ans = dpp[1][rem];
- if(rem - val[cur] >= 0) ans += dpp[0][rem - val[cur]];
- dpp[0][rem] = ans;
- }
- }
- cout<<dpp[0][k];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement