| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
果然!按从0开始老嚷昂,改成从1开始的就A了,题目叙述太有误导性了In Reply To:这道题的时间是从1开始的啊,白白让我郁闷了很久。 Posted by:KOPOPT at 2005-10-22 21:06:36 #include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int n;
while(scanf("%d", &n) > 0){
//if(n == -1) return 0;
int days[110];
for(int i = 1; i <= n; i++) scanf("%d", &days[i]);
int maxDay = 0;
int dayQ[110][110] = {0};
int req;
scanf("%d", &req);
for(int i = 0; i < req; i++){
int id, tm, mny;
scanf("%d%d%d", &id, &tm, &mny);
if(tm<days[id]) continue;
int org = dayQ[id][tm];
if(org < mny) dayQ[id][tm] = mny;
if(tm > maxDay) maxDay = tm;
}
for(int i = 1; i <= n; i++){
int mxMny = 0;
for(int j = maxDay; j >= 1; j--){
if(j < days[i]) break;
if(dayQ[i][j] < mxMny) dayQ[i][j] = mxMny;
else mxMny = dayQ[i][j];
}
}
int dp[110][110];
for(int i = 1; i <= maxDay; i++) dp[0][i] = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= maxDay; j++){
dp[i][j] = dp[i-1][j];
if(j < days[i]) continue;
if(dayQ[i][j] > 0){
int temp = dayQ[i][j];
if(j >= days[i]+1) temp += dp[i-1][j-days[i]];
if(temp > dp[i][j]) dp[i][j] = temp;
}
if(j > 1 && dp[i][j-1] > dp[i][j]){
dp[i][j] = dp[i][j-1];
}
}
}
printf("%d\n\n", dp[n][maxDay]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator