DAG(递归实现最短路)

来源:互联网 发布:手机淘宝运营攻略txt 编辑:程序博客网 时间:2024/05/13 02:23
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 100;int n = 0;int v[maxn];int d[maxn];int init() {     memset(d, -1, sizeof(int)*maxn);     return 0; }int dp(int s){     int& ans = d[s];     if (ans != -1) {         return ans;     }     if (0 == s) {         return 0;     }     ans = 1<<30;     for (int i = 1; i <= n; i++) {         if (s >= v[i]) {              ans = min(ans, dp(s-v[i]) + 1);         }     }     return ans; }int main() {     int ans = 1<<30;     printf("ans = %d\n", ans);     init();     while (1 == scanf("%d", &n)) {         for (int i = 1; i <= n; i++) {             scanf("%d", &v[i]);         }         int S = 0;         scanf("%d", &S);         int res = dp(S);         printf("res = %d\n", res);         init();     }     return 0; }