现在的位置: 首页 > 综合 > 正文

POJ3624

2013年11月06日 ⁄ 综合 ⁄ 共 871字 ⁄ 字号 评论关闭

 #include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
int ans[3][13000];
int main()
{
    int n,m,w[3403],d[3403];
    while(scanf("%d%d",&n,&m)!=EOF)
      {
       // printf("%d",sizeof(ans));
         for(int i=1;i<=n;i++)
           scanf("%d%d",&w[i],&d[i]);
         for(int i=0;i<=m;i++)
           {
             if(w[1]<=i)ans[1][i]=d[1];
             else ans[1][i]=0;
           }
         for(int i=2;i<=n;i++)
           {
             for(int j=0;j<=m;j++)
              { 
                 if(j>=w[i])
                    ans[2][j]=max(ans[1][j],ans[1][j-w[i]]+d[i]);
                 else ans[2][j]=ans[1][j];
              }
             for(int j=0;j<=m;j++)
              ans[1][j]=ans[2][j];
           }
           printf("%d\n",ans[2][m]);
      }
        
   
    return 0;
}
同3356一样,今天的DP简单上路题。

这里有一个地方需要注意一下,就是滚动数组,最开始开的数组是ans[3000][13000]提交得到的是内存超了,后来想到了对滚动数组的应用

抱歉!评论已关闭.