您的位置:首页 > 其它

uva624(DP)

2016-05-12 19:35 302 查看
求解:

for(int i = 0; i < tracks; i++) {

for(int j = N; j >= 0;j–) {

if(j >= t[i] && dp[j] <= dp[j - t[i]] + t[i] && dp[j - t[i]]+t[i] <= N) {

dp[j] = dp[j - t[i]] + t[i];

// f[j] = 1; 为什么加上这些要保存值的答案就会错误

// save[j] = i;

}

代码:

#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>

int N;
int tracks;
int t[25];
int f[25];
int dp[25];
int save[25];

int main() {

while(scanf("%d",&N) != EOF) {
scanf("%d",&tracks);
for(int i = 0; i < tracks; i++) {
scanf("%d",&t[i]);
//  cout << t[i] <<endl;
}
memset(dp,0,sizeof(dp));
memset(f,0,sizeof(f));
int _max = 0;
for(int i = 0; i < tracks; i++) {
for(int j = N; j >= 0;j--) {
if(j >= t[i] && dp[j] <= dp[j - t[i]] + t[i] && dp[j - t[i]]+t[i] <= N) {
dp[j] = dp[j - t[i]] + t[i];
//  f[j] = 1;a
//  save[j] = i;
}
//printf("%d ",f[j]);
_max = max(_max,dp[j]);
//printf("%d\n",_max);
}
//printf("%d\n",_max);
}
//  print(N);
for(int i = 0,j = N; i < tracks && j >= 0; i++) {

}
printf("%d\n",_max);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: