Cash Machine POJ
阿新 • • 發佈:2018-12-22
的用二進位制思想進行優化,要不然會tl
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<math.h> using namespace std; #define N 1e9+5 int w[10005],dp[100005]; int main() { int c; while(scanf("%d",&c)!=EOF) { int n,nn,ww,k=0; scanf("%d",&n); //memset(w,0,sizeof(w)); memset(dp,0,sizeof(dp)); //if(n==0){printf("0\n");break;} for(int i=1;i<=n;i++){ scanf("%d%d",&nn,&ww); for(int j=1;j<=nn;){ w[++k]=ww*j; nn=nn-j; j*=2; } if(nn>0){w[++k]=ww*nn;} } for(int i=1;i<=k;i++){ for(int j=c;j>=w[i];j--){ dp[j]=max(dp[j],dp[j-w[i]]+w[i]); } } printf("%d\n",dp[c]); } }