| ||||||||||
| 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 | |||||||||
都按着解题报告写啦...为什么还wa呢??一百个不理解...#include <stdio.h>
#include <iostream>
using namespace std;
struct fence{
int l,p,s;
bool friend operator < (fence a,fence b)
{
return a.s<b.s;
}
}w[101];
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int n,i,j,k,tmp;
int f[16010],g[16010];
while(scanf("%d%d",&n,&k)!=EOF){
for(i=0;i<k;i++) scanf("%d%d%d",&w[i].l,&w[i].p,&w[i].s);
sort(w,w+k);
// 初始处理
for(i=0;i<w[0].s;i++) f[i]=g[i]=0;
for(;i<=n;i++){
f[i]=i>w[0].l?w[0].l*w[0].p:i*w[0].p;
g[i]=0;
}
// for(i=0;i<=n;i++) printf("%d ",f[i]);
// printf("\n");
for(j=1;j<k;j++){ // 处理第二个以上的工人
for(i=w[j].s;i>=0;i--) g[i]=max(g[i+1]-w[j].p,f[i]);
for(i=w[j].s+w[j].l-1;i>=w[j].s;i--){
if(i>w[j].l) f[i]=g[i-w[j].l]+w[j].p*w[j].l;
else {
tmp=i>w[j].l?w[j].l*w[j].p:i*w[j].p;
if(tmp>f[i]) f[i]=tmp;
}
}
tmp=f[w[j].s+w[j].l-1];
for(i=w[j].s+w[j].l;i<=n;i++) f[i]=tmp; // 向上更新
// printf("g\n");
// for(i=0;i<=n;i++) printf("%d ",g[i]);
// printf("\nf\n");
// for(i=0;i<=n;i++) printf("%d ",f[i]);
// printf("\n");
}
printf("%d\n",f[n]);
}
return 1;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator