H/D

来源:互联网 发布:数据采集仪销售电话 编辑:程序博客网 时间:2024/06/05 01:14

做了一个并不对

budui

#include <iostream>using namespace std;const int maxi=1005;const int maxj=105;long long  dp[maxi][maxi];long long w[maxi];int n,k;int main(){    cin>>n>>k;    for(int i=0;i<k;i++)        w[i]=i+1;    for(int i=0;i<k;i++)        for(int j=0;j<=n;j++)    {        if(j<w[i])        dp[i+1][j]=dp[i][j];        else        {            dp[i+1][j]=max(dp[i][j],dp[i+1][j-w[i]]+w[i]);        }    }    cout << dp[k][n] << endl;    return 0;}

没想到会是用到大数,而且下面的代码是错误的

#include <iostream>#define LIMIT_ULL 100000000000000000using namespace std;const int maxi=1005;const int maxj=105;long long  dp[maxi][maxi][2];long long w[maxi];int n,k;int main(){    cin>>n>>k;    for(int i=0;i<k;i++)        w[i]=i+1;    for(int i=0;i<k;i++)        for(int j=0;j<=n;j++)    {        if(j<w[i])       {           dp[i+1][j][0]=dp[i][j][1]/LIMIT_ULL;            dp[i+1][j][1]=dp[i][j][1]%LIMIT_ULL;       }        else        {            dp[i+1][j][0]=max(dp[i][j][0]+dp[i][j][1],dp[i+1][j-w[i]][0]+dp[i+1][j-w[i]][1]+w[i])/LIMIT_ULL;            dp[i+1][j][1]=max(dp[i][j][0]+dp[i][j][1],dp[i+1][j-w[i]][0]+dp[i+1][j-w[i]][1]+w[i])%LIMIT_ULL;        }    }    if(dp[k][n][0])        cout<<dp[k][n][0];    cout << dp[k][n][1] << endl;    return 0;}

这是从网上搜刮来的一个代码;


#include <iostream>using namespace std; // 0高位 1低位unsigned long long dp[100 + 16][1000 + 16][2];// dp[i][j] := 用i种价格配出金额j的方案数#define LIMIT_ULL 100000000000000000 ///////////////////////////SubMain//////////////////////////////////int main(int argc, char *argv[]){#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);    freopen("out.txt", "w", stdout);#endifint N, K;cin >> N >> K;dp[0][0][1] = 1;for (int i = 1; i <= K; ++i){for (int k = 0; k <= N; k += i){for (int j = N; j >= k; --j){dp[i][j][0] += dp[i - 1][j - k][0];dp[i][j][1] += dp[i - 1][j - k][1];// 高位进位dp[i][j][0] += dp[i][j][1] / LIMIT_ULL;// 低位限制dp[i][j][1] = dp[i][j][1] % LIMIT_ULL;}}}if (dp[K][N][0]){cout << dp[K][N][0];}cout << dp[K][N][1] << endl;#ifndef ONLINE_JUDGE    fclose(stdin);    fclose(stdout);    system("out.txt");#endif    return 0;}


0 0