hdu 3496

来源:互联网 发布:linux下查看文件大小 编辑:程序博客网 时间:2024/05/16 13:59

二位背包。我发现自己太帅了,在

if(dp[M][L] == -1)
这一行我居然能写成

if(dp[M][L] != -1)

还一直在琢磨为什么结果是零。抓狂





#include <string.h>#include <stdio.h>int main(int argc, char *argv[]){int test_case,N,M,L;int dvdTimeLen[110],dvdValue[110],dp[110][1100];//FILE *fp;//fp = freopen("in3.txt","r",stdin);scanf("%d",&test_case);while(test_case --){scanf("%d%d%d",&N,&M,&L);for(int i = 0;i < N;++i){scanf("%d%d",&dvdTimeLen[i],&dvdValue[i]);}memset(dp,-1,sizeof(dp));for ( int j = 0 ; j <= L ; j ++ ){dp[0][j] = 0 ;}for(int  i = 0; i < N; ++ i){for(int j = M; j > 0; -- j){for(int k = L;k >= dvdTimeLen[i];--k){if(dp[j - 1][k - dvdTimeLen[i]] != -1){if(dp[j][k] < dp[j - 1][k - dvdTimeLen[i]] + dvdValue[i]){dp[j][k] = dp[j - 1][k - dvdTimeLen[i]] + dvdValue[i];}}}}}if(dp[M][L] == -1)dp[M][L] = 0;printf("%d\n",dp[M][L]);} return 0;}




原创粉丝点击