2015-09-04 42 views
5

Tôi đang gặp khó khăn với Lập trình động. Tôi đã thử vấn đề Coin Change tầm thường- COIN CHANGE Problem UVaThuật toán thay đổi tiền xu với lập trình động

Tôi đang cố gắng sử dụng phương pháp tiếp cận từ trên xuống với ghi nhớ nhưng tôi nhận được TLE. Đây là mã của tôi-

#include <bits/stdc++.h> 
using namespace std; 
#define ll long long 

typedef vector <int > vi; 
typedef vector <vi> vii; 
const int maxn = 10000007; 

int Set[maxn]; 
int Coin(int n,int m,vii & dp) 
{ 
    if(n==0) 
     return 1; 
    else if(n<0 || m<0) 
     return 0; 

    else if(dp[n][m]!=-1) 
     return dp[n][m]; 
    else 
    { 
     dp[n][m]=Coin(n-Set[m],m,dp)+Coin(n,m-1,dp); 

     return dp[n][m]; 
    } 
} 

int main() 
{ 
    int n,m=5; 
    Set[0]=50,Set[1]=25,Set[2]=10,Set[3]=5,Set[4]=1; 
    while(scanf("%d",&n)!=EOF) 
    {  
     vector <vector <int> > dp(n+1,vector<int> (m,-1)); 
     dp[0][0]=0; 
     cout << Coin(n,m-1,dp) << endl; 
    } 
} 

Tôi muốn biết tôi ghi nhớ sai hoặc từ trên xuống sẽ không hoạt động trong trường hợp này và cách tiếp cận từ dưới lên là lựa chọn duy nhất.

+0

Chính xác ngữ nghĩa của 'dp [i] [j]' là gì; đó có phải là số cách có thể sử dụng đồng tiền của loại 'j' cho một giá trị tiền của' i' hay là nó có gì khác? – Codor

+0

Vâng, đó là số cách để sử dụng đồng xu loại j cho giá trị tiền i – Joker

Trả lời

3

Bạn không được gọi hàm Coin cho mỗi testcase (mỗi giá trị n) dưới dạng m (số loại tiền) vẫn giữ nguyên trong mọi trường hợp, chỉ gọi một lần với giá trị tối đa là 7489 tại đây. và sau đó trả lời cho tất cả các testcase dưới dạng dp [n] [4]. Vui lòng xem mã bên dưới để hiểu rõ hơn.

n = 7489; 
vector <vector <int> > dp(n+1,vector<int> (m,-1)); 
dp[0][0]=0; 
Coin(n,m-1,dp); 
while(scanf("%d",&n)!=EOF) 
{  

    cout<<dp[n][4]<<endl; 
} 
+0

Tuyệt vời, tôi đoán điều này thực sự giải quyết được vấn đề. Tôi đã cố gắng tối ưu hóa phần bản ngã chính nhưng không bao giờ nghĩ rằng nó sẽ được thử nghiệm cho nhiều trường hợp thử nghiệm. – Srinath

+0

Cảm ơn rất nhiều. Tôi nghĩ rằng có một số vấn đề với tối ưu hóa của tôi. – Joker

Các vấn đề liên quan