您的位置:首页 > Web前端

USACO 4.1 Fence Rails

2011-08-12 13:39 363 查看
TASK: fence8
LANG: C++

Compiling...
Compile: OK

Executing...
Test 1: TEST OK [0.000 secs, 3032 KB]
Test 2: TEST OK [0.000 secs, 3032 KB]
Test 3: TEST OK [0.000 secs, 3032 KB]
Test 4: TEST OK [0.000 secs, 3032 KB]
Test 5: TEST OK [0.000 secs, 3032 KB]
Test 6: TEST OK [0.027 secs, 3032 KB]
Test 7: TEST OK [0.000 secs, 3032 KB]
Test 8: TEST OK [0.000 secs, 3032 KB]
Test 9: TEST OK [0.000 secs, 3032 KB]
Test 10: TEST OK [0.000 secs, 3032 KB]
Test 11: TEST OK [0.000 secs, 3032 KB]
Test 12: TEST OK [0.000 secs, 3032 KB]

All tests OK.


/*
ID: jiafeim1
LANG: C++
TASK: fence8
*/
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,r,m;

int orig[52],target[1055];
int prett[1055];
int total=0;
int tempOrig[52];
int mid;
int minTarget;
int space;
bool doit(int targetpos,int origpos)
{
if(targetpos<=0) return true;
if(space + prett[mid]>total) return false;
for(int i = origpos ;i<=n;++i)
if(target[targetpos]<=tempOrig[i])
{
tempOrig[i]-=target[targetpos];
if(tempOrig[i]<minTarget)
space += tempOrig[i];

if(target[targetpos]==target[targetpos-1])
{
if(doit(targetpos-1,i)) return true;
}
else
if(doit(targetpos-1,1)) return true;

if(tempOrig[i]<minTarget)
space -= tempOrig[i];

tempOrig[i]+=target[targetpos];
}
return false;
}

int main()
{

FILE *fin,*fout;
fin = fopen("fence8.in","r");
fout = fopen("fence8.out","w");
fscanf(fin,"%d",&n);
for(int i = 1;i<=n;++i)
{
fscanf(fin,"%d",orig+i);
total+=orig[i];
}

fscanf(fin,"%d",&m);
for(int i = 1;i<=m;++i)
{
fscanf(fin,"%d",target+i);
}
sort(orig+1,orig+n+1);
sort(target+1,target+m+1);
minTarget = target[1];
orig[0]=prett[0]=target[0]=0;

for(int i = 1;i<=m;++i)
{
prett[i] += prett[i-1]+target[i];
}
while(prett[m]>total) --m;
int left=0,right=m;
mid = (left+right)/2;

while(left<=right)
{
space = 0;
for(int i = 1;i<=n;++i) tempOrig[i] = orig[i];
if(doit(mid,1))
{
left = mid + 1;
mid = (right+left)/2;
}
else
{
right = mid - 1;
mid = (right +left)/2;
}

}
fprintf(fout,"%d\n",mid);
fclose(fin);
fclose(fout);

return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: