POJ 3624 Charm Bracelet
作者:互联网
代码:
错误代码:超空间:由于定义了一个二维的dp数组,然后超了,所以我们要把二维转换为一维
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxn = 3500; int dp[3405][12900]; struct node{ int w; int charm; }a[maxn]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d%d",&a[i].w,&a[i].charm); } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if((j-a[i].w)>=0){ dp[i][j] = max(dp[i-1][j],dp[i-1][j-a[i].w]+a[i].charm); } else dp[i][j] = dp[i-1][j]; } } cout<<dp[n][m]<<endl; return 0; }
正确代码:
#include<iostream> #include<stdio.h> using namespace std; const int maxn = 13000; int dp[maxn]; int w[3500],charm[3500]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d%d",&w[i],&charm[i]); } for(int i=1;i<=n;i++){ for(int j=m;j>=1;j--){ if(j-w[i]>=0) dp[j] = max(dp[j],dp[j-w[i]]+charm[i]); } } cout<<dp[m]<<endl; return 0; }
或是
#include<iostream> #include<stdio.h> using namespace std; const int maxn = 13000; int dp[maxn]; int w,charm; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d%d",&w,&charm); for(int j=m;j>=w;j--){ dp[j] = max(dp[j],dp[j-w]+charm); } } cout<<dp[m]<<endl; return 0; }
标签:maxn,int,d%,Bracelet,Charm,POJ,include,charm,dp 来源: https://www.cnblogs.com/lusiqi/p/12336725.html