程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> hdu 1284 錢幣兌換問題 (DP)

hdu 1284 錢幣兌換問題 (DP)

編輯:C#入門知識

[csharp] 
//dp(完全背包) 
#include <stdio.h> 
#include <string.h> 
#define N 35000 
int dp[N]; 
int main() 

    dp[0] = 1; 
    for(int i = 1; i <= 3; ++i) 
    {   //背包容量為N,裝入質量為i 的物品 
        for(int j = i; j < N; ++j) 
        { 
            dp[j] += dp[j-i]; 
        } 
    } 
    int n; 
    while(scanf("%d", &n) != EOF) 
        printf("%d\n", dp[n]); 
    return 0; 
}<pre name="code" class="csharp">//hdu 1284 找規律  
//給出n 看能n 內有多少個 2 和多少個3  
//具體看代碼和一下注視 
#include<stdio.h>  
#include <string.h>  
#define N 35000 
__int64 ans[N]; 
int main() 
{  
    int n; // 計算i 可以由多少個 2 組成  
    for(int i = 0; i < N; ++i) 
        // 後面的 +1 表示全由1組成的(只有1中情況) 
        ans[i] = i / 2 + 1;  
    //則這一行表示由 2組成的情況加上由1組成的情況  
    // 從前面往後推,看能由幾個3 組成,比如 ans[3]表示錢為3時  
    // 由1,2分硬幣組成的情況,可以表示成錢為0 時加上一個3分硬幣(這時方法數為 
    // 錢為 0 時由1,2,3組成的情況 加上錢為3時由1,2組成的方法數) 
    // 因此 ans[i] += ans[i-3]+1;不需要後面的+1  
    for(int i = 3; i < N; ++i) ans[i] += ans[i-3]; 
    //這一行ans[i]就表示由2組成的情況加上由3組成的情況  
    // ans[6]就相當於由2組成的情況ans[6] 加上 由1,2,3組成的情況的ans[6-3]  
    // 這樣往後推,就可以把 由3分組成的情況加上去  
    while(scanf("%d", &n) != EOF)  
        printf("%I64d\n", ans[n]); 
    return 0;  
}</pre><br> 
<pre></pre> 
<p></p> 
<pre></pre> 
<br> 
<p></p> 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved