POJ 1014
這道題可以歸為dp典型問題,但是在數據處理上還是要注意一下,不然很容易超時。
#include<iostream>
int ok;
int arr[7];
void find(int now,int x){
?? ?if(x==0)
?? ??? ?return;
?? ?int i,s,t;
?? ?s=now/x;
?? ?t=s>arr[x]?arr[x]:s;
?? ?if((now-x*t)!=0){
?? ??? ?for(i=t;i>=0;i--){
?? ??? ??? ?find(now-x*i,x-1);
?? ??? ??? ?if(ok)
?? ??? ??? ??? ?return;
?? ??? ?}
?? ?}
?? ?else{
?? ??? ?ok=1;
?? ??? ?return;
?? ?}
}
int main(){
?? ?int sum,p=1;
?? ?while(scanf("%d%d%d%d%d%d",&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6])&&!(arr[1]==0&&arr[2]==0&&arr[3]==0&&arr[4]==0&&arr[5]==0&&arr[6]==0)){
?? ??? ?arr[1]%=24;arr[2]%=24;arr[3]%=24;arr[4]%=24;arr[5]%=24;arr[6]%=24;
??? ?? //這里尤其要注意,不取摸是會超時的。取摸的方法是對6的倍數取摸如(12,18,24,30,。。。)
?? ??? ?sum=1*arr[1]+2*arr[2]+3*arr[3]+4*arr[4]+5*arr[5]+6*arr[6];
?? ??? ?ok=0;
?? ??? ?if(sum%2){
?? ??? ??? ?printf("Collection #%d:\n",p++);
?? ??? ??? ?printf("Can't be divided.\n");
?? ??? ?}
?? ??? ?else{
?? ??? ??? ?find(sum/2,6);
?? ??? ??? ?if(ok){
?? ??? ??? ??? ?printf("Collection #%d:\n",p++);
?? ??? ??? ??? ?printf("Can be divided.\n");
?? ??? ??? ?}
?? ??? ??? ?else{
?? ??? ??? ??? ?printf("Collection #%d:\n",p++);
?? ??? ??? ??? ?printf("Can't be divided.\n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if(p!=1)
?? ??? ??? ?printf("\n");
?? ?}
}
#include<iostream>
int ok;
int arr[7];
void find(int now,int x){
?? ?if(x==0)
?? ??? ?return;
?? ?int i,s,t;
?? ?s=now/x;
?? ?t=s>arr[x]?arr[x]:s;
?? ?if((now-x*t)!=0){
?? ??? ?for(i=t;i>=0;i--){
?? ??? ??? ?find(now-x*i,x-1);
?? ??? ??? ?if(ok)
?? ??? ??? ??? ?return;
?? ??? ?}
?? ?}
?? ?else{
?? ??? ?ok=1;
?? ??? ?return;
?? ?}
}
int main(){
?? ?int sum,p=1;
?? ?while(scanf("%d%d%d%d%d%d",&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6])&&!(arr[1]==0&&arr[2]==0&&arr[3]==0&&arr[4]==0&&arr[5]==0&&arr[6]==0)){
?? ??? ?arr[1]%=24;arr[2]%=24;arr[3]%=24;arr[4]%=24;arr[5]%=24;arr[6]%=24;
??? ?? //這里尤其要注意,不取摸是會超時的。取摸的方法是對6的倍數取摸如(12,18,24,30,。。。)
?? ??? ?sum=1*arr[1]+2*arr[2]+3*arr[3]+4*arr[4]+5*arr[5]+6*arr[6];
?? ??? ?ok=0;
?? ??? ?if(sum%2){
?? ??? ??? ?printf("Collection #%d:\n",p++);
?? ??? ??? ?printf("Can't be divided.\n");
?? ??? ?}
?? ??? ?else{
?? ??? ??? ?find(sum/2,6);
?? ??? ??? ?if(ok){
?? ??? ??? ??? ?printf("Collection #%d:\n",p++);
?? ??? ??? ??? ?printf("Can be divided.\n");
?? ??? ??? ?}
?? ??? ??? ?else{
?? ??? ??? ??? ?printf("Collection #%d:\n",p++);
?? ??? ??? ??? ?printf("Can't be divided.\n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if(p!=1)
?? ??? ??? ?printf("\n");
?? ?}
}
轉載于:https://www.cnblogs.com/saintqdd/archive/2007/08/05/843490.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: Windows Server 2003域
- 下一篇: 爱词霸英语学习社区还不错!