poj1959 Darts

来源:互联网 发布:淘宝联盟api免费申请 编辑:程序博客网 时间:2024/06/03 13:13

原题: http://poj.org/problem?id=1959

//问题简化为,给出n个数,取其中3个凑成指定的数字有多少种情况?数字可以重复使用 //每一轮可能出现的分数只有63种情况,三层遍历找出三轮数字相加,判断是否等于给定数字 //一开始总觉得是整数划分,挑了很久还是WA,看了答案才知道是枚举...脑子没绕过弯,很沮丧,下次要想清楚#include<cstdio>int main(){int arr[63]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,25,50};//相同的数字有不同的含义,比如两个相同的2,分别表示1*2,2*1两种情况。 int dp[181]={0};for(int sum=1;sum<=180;sum++){for(int i=0;i<63;i++){for(int j=i;j<63;j++){for(int k=j;k<63;k++){if(arr[i]+arr[j]+arr[k]==sum){dp[sum]++;}}}}}int t;scanf("%d",&t);for(int i=1;i<=t;i++){             int n;            scanf("%d",&n);            printf("Scenario #%d:\n%d\n\n",i,dp[n]);    }    return 0;}


原创粉丝点击